国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

ThinkPHP中類的構造函數_construct()與_initialize()的區別詳解

2024-05-04 23:55:49
字體:
來源:轉載
供稿:網友

前言

相信熟悉THINKPHP的phper基本上都很熟悉_initialize()這個方法,我們似乎也很少去使用_construct() ,除非自己寫插件,否則還真是很少用到。

今天查看代碼突然看到_construct()這個php自帶的構造方法,我的第一感覺是比較陌生,雖然之前學習java時經常遇到,但是很久不用基本忘記。我平時的習慣是將知識的重點寫

在我那本小筆記上,但是很久不寫字,曾經高中那個那種飄逸靈動的書寫筆法徹底丟到異次元。再加上之前的想法,所以就來學習學習技術大牛們寫寫博客,這不是為了裝逼,而只是讓自己工作成果的點點滴滴都能不隨時間流逝而消散。下面來看看詳細的介紹吧。

先貼上代碼(我的環境是wamp,使用了TP框架):

創建的FatherAction.class.php文件

<?phpclass FatherAction extends Action{  public function __construct(){    echo 'father';  }}?>

創建的SonAction.class.php文件

<?phpclass SonAction extends FatherAction{  public function __construct(){    echo 'son';  }function index(){}}?>

運行子類SonAction里的index()可以看到輸出的結果:

son

如果將子類改為:

<?phpclass SonAction extends FatherAction{   public function __construct(){    parent::__construct();    echo 'son';   }  function index(){  }}?>

運行結果為;

fatherson

上面的結果可以得出結論:

在執行子類的構造函數時并不會自動調用父類的構造函數,如果你要調用的話,那么要加上parent::__construct()

當我們把上述的構造方法改為THINKPHP_initialize()方法時運行會發現:結果與前面的一致,若要執行父類的_initialize()方法,也需要使用這一句:parent::_initialize()

那是不是說明php自帶的構造函數__construct()與THINKPHP的_initialize()方法一樣的呢?

先貼上兩段代碼:

<?phpclass FatherAction extends Action{  public function __construct(){    echo 'father';  }}?>
<?phpclass SonAction extends FatherAction{  public function _initialize(){    echo 'son';  }  function index(){  }}?>

當執行子類SonAction的index方法時發現,輸出的結果為:father

即子類調用了父類的構造函數,而沒有調用子類的_initialize()方法

再貼上兩段代碼:

<?phpclass FatherAction extends Action{  public function __construct(){    if(method_exists($this,"hello")){      $this->hello();    }    echo 'father';  }}?>
<?phpclass SonAction extends FatherAction{  public function _initialize(){    echo 'son';  }  function index(){  }  function hello(){    echo 'hello';  }}?>

執行子類SonAction的index方法,發現輸入的結果為hellofather

由此可以得出結論:

  當THINKPHP的父類有構造函數而子類沒有時,THINKPHP不會去執行子類的_initialize()

  當THINKPHP的父類子類均有構造函數時,要調用父類的構造函數必須使用parent::__construct() ----------------- _initialize()同理;

  當THINKPHP的子類同時存在__construct構造函數和_initialize()方法,只會執行子類的__construct構造函數(這個本人親測,上述代碼沒有)。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 肇东市| 麻栗坡县| 铁力市| 永吉县| 屏山县| 莲花县| 闻喜县| 高平市| 瑞金市| 宁陵县| 香港 | 温宿县| 中西区| 珠海市| 武鸣县| 长沙市| 峡江县| 通州区| 辽阳县| 民县| 湖州市| 嫩江县| 东丰县| 高阳县| 衡东县| 潞城市| 佛坪县| 东方市| 安陆市| 黄龙县| 内乡县| 锡林郭勒盟| 电白县| 射洪县| 珠海市| 阿鲁科尔沁旗| 固镇县| 台北县| 淳化县| 开化县| 商丘市|