ThinkPHP5.0.11中的 _initialize() 和 PHP的__construct()的差異
阿新 • • 發佈:2018-12-07
比較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(), 則子類構造有效