版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/duringnone/article/details/79106683
比较ThinkPHP5.0.11中的 _initialize() 和 PHP的__construct()的差异
<?php
/**
* 小结:
* 1、触发时机
* __construct(): 调用到类/实例化类时才会触发
* _initialize(): 调用了类中的任一方法才会被触发
*
* 2、各种情况:
* 1) 当父类既有 __constrcut() 又有 _initialize() 在同一级父类中,则子类__construct()有效 , _initialize() 失效,
* 2) 当父类有无 __construct(), 有_initialize() , 则子类构造和初始化方法均有效 [适用]
* 3) 当父类 有__construct() , 无 _initialize(), 则子类构造有效
*/
//命名空间
namespace app\member\controller;
//调用thinkphp框架的基类
use think\Controller;
//父类继承自thinkphp框架的基类
class Father extends Controller
{
//构造方法
public function __construct()
{
echo '這是爸爸的构造方法<br />';
}
//初始化方法
public function _initialize()
{
echo '這是爸爸的init方法<br />';
}
//测试方法
public function index()
{
echo 11111111;
}
}
//实例化父类,并调用测试方法
//$father = new Father();
//$father->index();
//-----------------------------------------------------------------------------------------------------------
<?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';
}
}
//$son = new Son();
//$son->index();
测试时在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(), 则子类构造有效