2015-03-23 3 views
0
<?php 

class BaseController extends Controller 
{ 
    protected $foo; 

    public function __construct() 
    { 
     $this->foo = '123'; 
    } 

    protected function setupLayout() 
    { 
     if (! is_null($this->layout)) 
     { 
      $this->layout = View::make($this->layout); 
     } 
    } 
} 

Выше BaseController, и я хочу объявить foo как 123, но я могу получить foo переменный в контроллере, который я простиралась от этого basecontroller, вы можете помочь?Доступ свойства из расширенного класса

public function detail($action) 
{ 
    return $this->foo; 
} 
+0

Есть ли какая-то конкретная проблема, с которой вы столкнулись? – thpl

+0

Конечно, вы можете. Но, в чем твоя проблема? –

+0

когда я получаю переменную в контроллере, которая простирается от базы, она пуста ... нет никакой ошибки. Msg. – user2617403

ответ

-1

При расширении контроллера, я полагаю, что вы сейчас делаете это:

<?php 

class NewController extends BaseController 
{ 
    public function __construct() 
    { 
     // Do something here. 
    } 

    public function detail($action) 
    { 
     return $this->foo; 
    } 
} 

Вы видите, как метод __construct в перезаписи. Вы можете легко исправить это путем добавления parent::__construct() к началу метода, так что вы будете иметь это:

<?php 

class NewController extends BaseController 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
     // Do something here. 
    } 

    public function detail($action) 
    { 
     return $this->foo; 
    } 
} 
+0

Почему downvote? – James

0

Как в документации: http://php.net/manual/en/language.oop5.decon.php

Примечание: Родитель конструкторы не вызываются, если дочерний класс определяет конструктор. Для запуска родительского конструктора требуется вызов parent: __ construct() в дочернем конструкторе.

Как вы делаете какую-то работу в своем классе конструктора родительского, вы должны вызвать его непосредственно в вашем подклассе тоже (даже это будет единственным, что вы делаете в конструкторе ребенка). I.e .:

class ChildController extends BaseController 
{ 
    public function __construct() { 
     parent::__construct(); 
    } 

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