首页 > thinkphp 文件里面既有__initialize()又有__construct(),是否一起起作用呢?

thinkphp 文件里面既有__initialize()又有__construct(),是否一起起作用呢?

thinkphp 文件里面既有__initialize()又有__construct(),是否一起起作用呢?

class Controller{
    public function _initialize(){
    }
    
    public function _construct(){
    }

}

__construct()是类的构造函数,_initialize()只是thinkphp定义的一个特殊的方法而已。
正常情况下子类继承父类,子类初始化且同时要调用父类的初始化的写法是这样的

class A 
{
    public function __construct()
    {
        //todo
    }
}

class B extends A 
{
    public function __construct()
    {
         parent::__construct(); 
    }    
}

但是thinkphp呢,觉得频繁调用parent::__construct太麻烦了,所以他在基类的时候做了这样一件事。


这方法就是父类调用子类的方法_initialize()在父类里初始化,子类没有构造函数,所以直接继承父类的构造函数,达到初始化的效果。

好吧,废化说了一大堆现在回答你的问题吧。
“thinkphp 文件里面既有__initialize()又有__construct(),是否一起起作用呢?”
嗯,这个问题好纠结,不知道怎么回答,怕回答不全,因为赶脚分好多情况啊,我就说比较普遍的情况吧。

作死型

class AController extends Controller {
    public function _initialize(){
    }
    
    public function __construct(){
       /**
        * 如果子类不写parent::__construct()的话,那当然就不会一起作用啦。
        * 但为什么又说是作死呢,因为如果不继承父类的构造函数,很多功能就用不了啦
        * 不做死就不会死
        */  
    }

}

比较正常型

class AController extends Controller {
    public function _initialize(){
    }
    
    public function __construct(){
       parent::__construct();
       /**
        * 如果两个_initialize()和__construct()里面的代码功能不重复的话,
        * 还有我脑子没瓦特的话,应该是一起起作用的
        */
    }

}

题外话,既然都使用tp框架了,就按照人家订的规则来写就好啦,子类初始化的时候直接使用_initialize()就好了,为什么非要那么叛逆用__construct()呢?听话做个乖孩子不好嘛


  if(method_exists($this,'_initialize'))
            $this->_initialize();
【热门文章】
【热门文章】