Как расширить и получить доступ к свойствам родительского конструктора

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

Итак, у меня есть 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

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() {

Обновить

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

class BaseController {

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

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]