亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中如何使用魔術常量

發布時間:2021-06-30 16:32:39 來源:億速云 閱讀:132 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關PHP中如何使用魔術常量,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

  PHP魔術方法有哪些

  __construct(),類的構造函數__destruct(),類的析構函數__call(),在對象中調用一個不可訪問方法時調用__callStatic(),用靜態方式中調用一個不可訪問方法時調用__get(),獲得一個類的成員變量時調用__set(),設置一個類的成員變量時調用__isset(),當對不可訪問屬性調用isset()或empty()時調用__unset(),當對不可訪問屬性調用unset()時被調用。__sleep(),執行serialize()時,先會調用這個函數__wakeup(),執行unserialize()時,先會調用這個函數__toString(),類被當成字符串時的回應方法__invoke(),調用函數的方式調用一個對象時的回應方法__set_state(),調用var_export()導出類時,此靜態方法會被調用。__clone(),當對象復制完成時調用

  __construct()和__destruct()

  構造函數和析構函數應該不陌生,他們在對象創建和消亡時被調用。例如我們需要打開一個文件,在對象創建時打開,對象消亡時關閉

  classFileRead

  {

  protected$handle=NULL;

  function__construct(){

  $this->handle=fopen(...);

  }

  function__destruct(){

  fclose($this->handle);

  }

  }

  >

  這兩個方法在繼承時可以擴展,例如:

  classTmpFileReadextendsFileRead

  {

  function__construct(){

  parent::__construct();

  }

  function__destruct(){

  parent::__destruct();

  }

  }

  >

  __call()和__callStatic()

  在對象中調用一個不可訪問方法時會調用這兩個方法,后者為靜態方法。這兩個方法我們在可變方法(Variablefunctions)調用中可能會用到。

  classMethodTest

  {

  publicfunction__call($name,$arguments){

  echo"Callingobjectmethod'$name'".implode(',',$arguments)."\n";

  }

  publicstaticfunction__callStatic($name,$arguments){

  echo"Callingstaticmethod'$name'".implode(',',$arguments)."\n";

  }

  }

  $obj=newMethodTest;

  $obj->runTest('inobjectcontext');

  MethodTest::runTest('instaticcontext');

  >

  __get(),__set(),__isset()和__unset()

  當get/set一個類的成員變量時調用這兩個函數。例如我們將對象變量保存在另外一個數組中,而不是對象本身的成員變量

  classMethodTest

  {

  private$data=array();

  publicfunction__set($name,$value){

  $this->data[$name]=$value;

  }

  publicfunction__get($name){

  if(array_key_exists($name,$this->data))

  return$this->data[$name];

  returnNULL;

  }

  publicfunction__isset($name){

  returnisset($this->data[$name])

  }

  publicfunctionunset($name){

  unset($this->data[$name]);

  }

  }

  >

  __sleep()和__wakeup()

  當我們在執行serialize()和unserialize()時,會先調用這兩個函數。例如我們在序列化一個對象時,這個對象有一個數據庫鏈接,想要在反序列化中恢復鏈接狀態,則可以通過重構這兩個函數來實現鏈接的恢復。例子如下:

  classConnection

  {

  protected$link;

  private$server,$username,$password,$db;

  publicfunction__construct($server,$username,$password,$db)

  {

  $this->server=$server;

  $this->username=$username;

  $this->password=$password;

  $this->db=$db;

  $this->connect();

  }

  privatefunctionconnect()

  {

  $this->link=mysql_connect($this->server,$this->username,$this->password);

  mysql_select_db($this->db,$this->link);

  }

  publicfunction__sleep()

  {

  returnarray('server','username','password','db');

  }

  publicfunction__wakeup()

  {

  $this->connect();

  }

  }

  >

  __toString()

  對象當成字符串時的回應方法。例如使用echo$obj;來輸出一個對象

  //Declareasimpleclass

  classTestClass

  {

  publicfunction__toString(){

  return'thisisaobject';

  }

  }

  $class=newTestClass();

  echo$class;

  >

  這個方法只能返回字符串,而且不可以在這個方法中拋出異常,否則會出現致命錯誤。

  __invoke()

  調用函數的方式調用一個對象時的回應方法。如下

  classCallableClass

  {

  function__invoke(){

  echo'thisisaobject';

  }

  }

  $obj=newCallableClass;

  var_dump(is_callable($obj));

  >

  __set_state()

  調用var_export()導出類時,此靜態方法會被調用。

  classA

  {

  public$var1;

  public$var2;

  publicstaticfunction__set_state($an_array){

  $obj=newA;

  $obj->var1=$an_array['var1'];

  $obj->var2=$an_array['var2'];

  return$obj;

  }

  }

  $a=newA;

  $a->var1=5;

  $a->var2='foo';

  var_dump(var_export($a));

  >

  __clone()

  當對象復制完成時調用。例如在設計模式詳解及PHP實現:單例模式一文中提到的單例模式實現方式,利用這個函數來防止對象被克隆。

  publicclassSingleton{

  privatestatic$_instance=NULL;

  //私有構造方法

  privatefunction__construct(){}

  publicstaticfunctiongetInstance(){

  if(is_null(self::$_instance)){

  self::$_instance=newSingleton();

  }

  returnself::$_instance;

  }

  //防止克隆實例

  publicfunction__clone(){

  die('Cloneisnotallowed.'.E_USER_ERROR);

  }

  }

  >

  PHP魔術常量怎么使用

  PHP中的常量大部分都是不變的,但是有8個常量會隨著他們所在代碼位置的變化而變化,這8個常量被稱為魔術常量。

  __LINE__,文件中的當前行號__FILE__,文件的完整路徑和文件名__DIR__,文件所在的目錄__FUNCTION__,函數名稱__CLASS__,類的名稱__TRAIT__,Trait的名字__METHOD__,類的方法名__NAMESPACE__,當前命名空間的名稱

  這些魔術常量常常被用于獲得當前環境信息或者記錄日志。

關于PHP中如何使用魔術常量就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

陇南市| 宜昌市| 扶风县| 喀什市| 鸡东县| 嘉义市| 江津市| 赣榆县| 民勤县| 淮北市| 察隅县| 祁门县| 白玉县| 兰州市| 永福县| 长子县| 凤台县| 崇明县| 鄢陵县| 岳阳市| 长宁县| 华宁县| 彝良县| 左贡县| 铜梁县| 桦川县| 隆尧县| 台湾省| 汝南县| 南昌县| 富川| 海南省| 宁海县| 兴隆县| 六枝特区| 壤塘县| 镶黄旗| 凤冈县| 二连浩特市| 云林县| 呼和浩特市|