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();