2016-04-05 3 views
0

Я пытаюсь получить доступ к свойствам родительского класса __construct в дочернем классе, который расширяет его, однако не уверен, как это сделать, поскольку я пробовал несколько методов и не дал мне ожидаемый результат.PHP - Как расширить и получить доступ к свойствам родительского конструктора

Итак, у меня есть baseController и indexController, который расширяет его, я хочу иметь прямой доступ к свойствам родителя в дочернем контроллере.

  $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

если вы звоните 'IndexController :: index' в статическом контексте, вы не можете иметь доступ к' $ this' – Federkun

+2

__construct ($ конфигурации) не то же самое, как __construct() – bassxzero

+0

Как еще я получить доступ к свойству со статическим :: $ config? Я думаю, что мне нужно вызвать метод индекса как статический, как часть структуры, которую я использую. – mhvvzmak1

ответ

0

Есть несколько проблем с кодом, который у вас есть. Вы настраиваете конфигурации, как глобальный, он должен быть внутри BaseController и установить его на public или protected:

class BaseController { 
    protected $config = ... 

Так же, как @ mhvvzmak1 упоминалось, ваш ребенок конструктор вызова родителей должным образом. Например, вы можете сделать это так:

class IndexController extends BaseController { 

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

и, наконец, так же, как dan08 упоминалось, вы не можете ссылаться на $this от статического метода, изменить индекс функции:

public function index() { 

Обновление

Если вы действительно хотите, чтобы дочерняя функция оставалась статической, как требуется вашей инфраструктурой, вы создаете конфигурацию static functio n на BaseController и вызвать его у ребенка.

class BaseController { 

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

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

Рамка, похоже, не позволяет мне изменить метод из static, я получаю сообщение об ошибке «Нестатический метод indexController :: index() не следует называть статическим (8192)« – mhvvzmak1

+0

в какой структуре вы используете? – KDaker

+0

http://flightphp.com/ – mhvvzmak1

Смежные вопросы