1. 程式人生 > >ThinkPHP5.0.11中的 _initialize() 和 PHP的__construct()的差異

ThinkPHP5.0.11中的 _initialize() 和 PHP的__construct()的差異

比較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(), 則子類構造有效