thinkphp中_initialize与__construct的区别

thinkphp中_initialize__construct的区别

两个函数的不同

__constructphp语法中构造函数的概念,而_initialize这个函数是由thinkphp框架约定俗称的一个继承自thinkphp框架中的类的子类的初始化函数。__constructphp语言自带的函数,而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();
?>
发布了11 篇原创文章 · 获赞 1 · 访问量 183

猜你喜欢

转载自blog.csdn.net/xuancuocui1413/article/details/103920627