在PESCMS2.5之前,构造函数都是使用PHP本身的construct()。在实际的开发过程中,随着不同人员的参与,他们容易对构造函数进行调整,导致开发过程出现各种奇异的错误。为此PESCMS2.5起,不再允许在控制器中使用PHP本身的construct()方法。若执意调用__construct(),程序将会报出如下错误:
PHP error:Cannot override final method Core\Controller\Controller::__construct()
__init()
对于屏蔽construct()的做法,PESCMS给出了一个代替的方法:init()。该方法的作用与PHP本身的构造函数一样,在控制器被执行的那一刻起,它就会自动运行其中的方法。用法很简单,在任意控制器中,声明该方法则可,下面给出关于文档系统中定义构造函数的示例代码:
- <?php
- namespace App\Doc;
- abstract class Common extends \Core\Controller\Controller {
- public function __init() {
- parent::__init();//引用父类定义的构造函数方法,本行方法请依据实际的业务需求调用
- if ($this->checkLogin() === true) {
- $this->login = true;
- }
- $this->tree();
- }
- }