thinkphp中_initialize
与__construct
的区别
两个函数的不同
__construct
是php
语法中构造函数的概念,而_initialize
这个函数是由thinkphp
框架约定俗称的一个继承自thinkphp
框架中的类的子类的初始化函数。__construct
是php
语言自带的函数,而initialize
是框架约定的函数。
_initialize
的作用
_initialize
的作用就是创建类的时候可以用来设置一些需要初始化的数据。简单的理解就是可以让thinkphp
框架的使用者在初始化一些数据的时候不需要再用到构造函数,用_initialize
函数就可以了,因为一个派生类的构造函数每次都需要先调用parent::__construct();
。
_initialize
的实现原理
<?php
class Father {
function __construct()
{
$this->_initialize();
}
//父类中_initialize方法存在的目的是为了防止子类没有_initialize方法时出现错误的问题。
function _initialize(){
echo "I am father initialize.<br/>";
}
}
class Son1 extends Father {
public function __construct()
{
parent::__construct();
}
//子类中的_initialize会覆盖父类中的_initialize
function _initialize()
{
echo "I am son initialize.<br/>";
}
function sayHello(){
echo "Hello!";
}
}
class Son2 extends Father {
function sayHello(){
echo "Hello!";
}
}
//当Son1类实例化时,首先子类的_initialize函数会将父类的_initialize覆盖。然后,父类的构造函数会调用子类的_initialize,达到不显示调用子类的_initialize方法,却又能向构造函数一样将数据初始化的目的。
(new Son1())->sayHello();
echo "<br/>";
(new Son2())->sayHello();
?>