日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

thinkphp中__construct与_initialize()的区别

發(fā)布時(shí)間:2024/4/15 php 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 thinkphp中__construct与_initialize()的区别 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(我的環(huán)境是wamp,使用了TP框架):

?

創(chuàng)建的FatherAction.class.php文件

<?php


class FatherAction extends Action{
  public function __construct(){
    echo 'father';
  }
}

?>

創(chuàng)建的SonAction.class.php文件

<?php


class SonAction extends FatherAction{
  public function __construct(){
    echo 'son';
  }
function index(){

}
}

?>

?

運(yùn)行子類SonAction里的index()可以看到輸出的結(jié)果:

son

?

如果將子類改為:

<?php


class SonAction extends FatherAction{
   public function __construct(){
    parent::__construct();
    echo 'son';
   }
  function index(){

  }
}

?>

?

運(yùn)行結(jié)果為;

fatherson

?

上面的結(jié)果可以得出結(jié)論:

在執(zhí)行子類的構(gòu)造函數(shù)時(shí)并不會(huì)自動(dòng)調(diào)用父類的構(gòu)造函數(shù),如果你要調(diào)用的話,那么要加上parent::__construct()

?

當(dāng)我們把上述的構(gòu)造方法改為THINKPHP_initialize()方法時(shí)運(yùn)行會(huì)發(fā)現(xiàn):結(jié)果與前面的一致,若要執(zhí)行父類的_initialize()方法,也需要使用這一句:

parent::_initialize()

?

那是不是說(shuō)明php自帶的構(gòu)造函數(shù)__construct()與THINKPHP的_initialize()方法一樣的呢?

?

先貼上兩段代碼:

<?php


class FatherAction extends Action{
  public function __construct(){
    echo 'father';
  }
}

?>

?

<?php


class SonAction extends FatherAction{
  public function _initialize(){
    echo 'son';
  }


  function index(){

  }

}

?>

?

當(dāng)執(zhí)行子類SonAction的index方法時(shí)發(fā)現(xiàn),輸出的結(jié)果為:father

即子類調(diào)用了父類的構(gòu)造函數(shù),而沒(méi)有調(diào)用子類的_initialize()方法

?

再貼上兩段代碼:

<?php


class FatherAction extends Action{
  public function __construct(){
    if(method_exists($this,"hello")){
      $this->hello();
    }
    echo 'father';
  }
}

?>

?

<?php


class SonAction extends FatherAction{
  public function _initialize(){
    echo 'son';
  }
  function index(){

  }

  function hello(){
    echo 'hello';
  }
}

?>

?

執(zhí)行子類SonAction的index方法,發(fā)現(xiàn)輸入的結(jié)果為hellofather

由此可以得出結(jié)論:

  當(dāng)THINKPHP的父類有構(gòu)造函數(shù)而子類沒(méi)有時(shí),THINKPHP不會(huì)去執(zhí)行子類的_initialize();

  當(dāng)THINKPHP的父類子類均有構(gòu)造函數(shù)時(shí),要調(diào)用父類的構(gòu)造函數(shù)必須使用parent::__construct()-----------------_initialize()同理;

  當(dāng)THINKPHP的子類同時(shí)存在__construct構(gòu)造函數(shù)和_initialize()方法,只會(huì)執(zhí)行子類的__construct構(gòu)造函數(shù)(這個(gè)本人親測(cè),上述代碼沒(méi)有)。

?

本文摘自:http://www.cnblogs.com/zyp-itlife/p/5880733.html

轉(zhuǎn)載于:https://www.cnblogs.com/jiafeimao-dabai/p/7423016.html

總結(jié)

以上是生活随笔為你收集整理的thinkphp中__construct与_initialize()的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。