我试图在扩展它的子类中访问父类__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 :(得分: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() {
<强>更新强>
如果你真的希望子函数保持框架所需的静态,你可以在BaseController
上为配置设置一个静态函数,并在子文件中调用它。
class BaseController {
protected static function config() {
return ['site' => 'mySite'];
}
}
class Child extends BaseController {
public static function index() {
$config = BaseController::config();
}
}