2012-04-28 34 views
0

访问抽象类中的属性我想构建一个将扩展所有其他控制器的抽象基本控制器。到目前为止,我有这样的:不能通过子类

abstract class BaseController { 

    protected $view; 
    protected $user; 

    public function __construct() { 
     $this->view = new View; //So a view is accessible to subclasses via $this->view->set(); 
     $this->user = new User; //So I can check $this->user->hasPermission('is_admin'); 
    } 
    abstract function index(); 

    } 

class UserController extends BaseController { 

    public function index() {} 

    public function login() { 

    if($this->user->isLoggedin()) { 
    redirect to my account 
    } 
    else { 
     $this->view->set('page_title', "User Login"); 
     $this->view->set('sidebar', $sidebar); //contains sidebar HTML 
     $this->view->set('content', $content); //build main page HTML 
     $this->view->render(); 

} 
} 
} 

问题我得到的是我得到的错误是这样的:

Call to a member function set() on a non-object in C:\xampp\htdocs\program\core\controllers\admin.controller.php on line 44 

如果我把$用户,并在主控制器$视图属性(即UserController中) ,一切正常。但我只想设置这些对象一次(在基本控制器中),而不必在我的所有控制器中添加$this->view = new View;

修复:我覆盖了我的构造函数,我以为你不能在抽象类上调用parent :: __ construct()。

+0

您是否以我们在这里没有看到的方式重写构造函数,如果是的话,您调用了parent :: __ construct()? – 2012-04-28 17:21:49

+0

你的代码适用于我的测试用例。您已覆盖__constructor。 – 2012-04-28 17:27:19

回答

0

你想要做的事情应该工作。确保你没有掩盖你的构造函数UserController。 (即,如果它有一个构造函数,则需要调用其父构造函数)。

否则,请执行一些调试以查看$this->view正在重置的位置。

0

您的代码适用于我。您要么覆盖UserController中的__construct()方法,要么覆盖view字段而不是View对象。

你在这个表格中有什么可以工作。