PHP - 如何扩展和访问父构造函数属性

时间:2016-04-05 21:39:43

标签: php constructor class-visibility

我试图在扩展它的子类中访问父类__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

1 个答案:

答案 0 :(得分:0)

您遇到的代码有几个问题。您将配置设置为全局,应该在BaseController内,并将其设置为publicprotected

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();
   }
}