比较ThinkPHP5.0.11中的 _initialize() 和 PHP的__construct()的差异
namespace app\member\controller;
use think\Controller;
class Father extends Controller
{
public function __construct()
{
echo '這是爸爸的构造方法<br />';
}
public function _initialize()
{
echo '這是爸爸的init方法<br />';
}
public function index()
{
echo 11111111;
}
}
<?php
namespace app\member\controller;
class Son extends Father
{
public function __construct() {
parent::__construct();
echo '这是son的构造方法<br />';
}
public function _initialize()
{
parent::_initialize();
echo '这是son的init方法<br />';
}
public function index()
{
echo '22222222';
}
}
测试时在url地址栏中输入,test.com可替换成自己配置的虚拟主机域名
格式:
http://域名/模块名/控制器名/方法名
示例:
http://test.com/member/father/index
http://test.com/member/son/index
小结:
1、触发时机
__construct(): 调用到类/实例化类时出发
_initialize(): 调用了类中的方法才会被触发
2、各种情况:
1) 当父类既有 __constrcut() 又有 _initialize() 在同一级父类中,则子类__construct()有效 , _initialize() 失效,
2) 当父类有无 __construct(), 有_initialize() , 则子类构造和初始化方法均有效 [适用]
3) 当父类 有__construct() , 无 _initialize(), 则子类构造有效