Я пытаюсь получить доступ к свойствам родительского класса __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
Есть несколько проблем с кодом у вас там. Вы настраиваете конфиг как глобальный, он должен быть внутри вашего 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();
}
}
Других решений пока нет …