在PESCMS2.5之前,构造函数都是使用PHP本身的construct()。在实际的开发过程中,随着不同人员的参与,他们容易对构造函数进行调整,导致开发过程出现各种奇异的错误。为此PESCMS2.5起,不再允许在控制器中使用PHP本身的construct()方法。若执意调用__construct(),程序将会报出如下错误:

PHP error:Cannot override final method Core\Controller\Controller::__construct()

__init()

对于屏蔽construct()的做法,PESCMS给出了一个代替的方法:init()。该方法的作用与PHP本身的构造函数一样,在控制器被执行的那一刻起,它就会自动运行其中的方法。用法很简单,在任意控制器中,声明该方法则可,下面给出关于文档系统中定义构造函数的示例代码:

  1. <?php
  2.  
  3. namespace App\Doc;
  4.  
  5. abstract class Common extends \Core\Controller\Controller {
  6.  
  7. public function __init() {
  8. parent::__init();//引用父类定义的构造函数方法,本行方法请依据实际的业务需求调用
  9.  
  10. if ($this->checkLogin() === true) {
  11. $this->login = true;
  12. }
  13. $this->tree();
  14. }
  15.  
  16. }