2016-04-05 8 views
0

Ich versuche auf die Elternklasse __construct Eigenschaften innerhalb einer Kindklasse, die dies erweitert, jedoch nicht sicher, wie dies zu tun, wie ich mehrere Methoden ausprobiert und mir nicht gab das erwartete Ergebnis.PHP - Wie zu erweitern und auf Eltern Konstruktor Eigenschaften zugreifen

So habe ich eine BaseController und eine IndexController, die es erweitert, möchte ich direkten Zugriff auf die Eigenschaften der Eltern in der Kind-Controller haben können.

  $config = ['site' => 'test.com']; 

      class baseController { 

       public function __construct($config){ 

        $this->config = $config; 

       } 

      } 

      class indexController extends baseController { 

       public function __construct(){ 
        parent::__construct(); // doesnt seem to give any outcome 
       } 

       public static function index() { 

        var_dump($this->config); // need to access within this method 

       } 

      } 

      $app->route('/',array('indexController','index')); // the route/would call this controller and method to return a response 
+1

wenn Sie 'Indexcontroller :: index' in einem statischen Kontext nennen Sie keinen Zugriff auf' $ this' haben – Federkun

+2

__construct ($ config) ist nicht das gleiche wie __construct() – bassxzero

+0

Wie sonst würde ich Zugriff auf die Eigenschaft mit statischen :: $ config? Ich denke, dass ich die Indexmethode als statisch als Teil des Frameworks aufrufen muss, das ich verwende – mhvvzmak1

Antwort

0

Es gibt einige Probleme mit Code, den Sie dort haben. Sie einrichten Config als globaler, sollte es zu public oder protected in Ihrem BaseController und eingestellt werden: erwähnt

class BaseController { 
    protected $config = ... 

Genau wie @ mhvvzmak1, Ihr Kind Konstruktor wird die Eltern richtig aufrufen. zum Beispiel können Sie es wie so tun:

class IndexController extends BaseController { 

    public function __construct(){ 
     $config = []; 
     parent::__construct($config); 
    } 

und schließlich wie dan08 erwähnt, können Sie nicht $this aus einer statischen Methode verweisen, Ihre Indexfunktion ändern:

public function index() { 

Update

Wenn Sie möchten, dass die untergeordnete Funktion statisch bleibt, wie von Ihrem Framework gefordert, machen Sie config zu einer statischen Funktion n auf der BaseController und rufen Sie es im Kind.

class BaseController { 

    protected static function config() { 
    return ['site' => 'mySite']; 
    } 
} 

class Child extends BaseController { 
    public static function index() { 
     $config = BaseController::config(); 
    } 
} 
+0

Das Framework scheint nicht zu erlauben Um die Methode von statisch zu ändern, erhalte ich eine Fehlermeldung "Nicht statische Methode indexController :: index() sollte nicht statisch aufgerufen werden (8192)" – mhvvzmak1

+0

Welchen Rahmen verwenden Sie? – KDaker

+0

http://flightphp.com/ – mhvvzmak1