亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php面相對象的魔術方法中文說明與例子

2024-09-04 11:43:47
字體:
來源:轉載
供稿:網友

在 PHP 中以兩個下劃線開頭的方法,__construct(),__destruct (),__call(),__callStatic(),__get(),__set(),__isset(),__unset (),__sleep(),__wakeup() 等,被稱為"魔術方法"(Magic methods).

集合涵義

在PHP中以兩個下劃線開頭的方法,__construct(), __destruct (), __call(), __callStatic(),__get(), __set(), __isset(), __unset (), __sleep(), __wakeup(), __toString(), __set_state,() __clone() __autoload()等,被稱為"魔術方法"(Magic methods)。如果希望PHP調用這些魔術方法,首先必須的類中定義,否則PHP不會執行未創建的魔術方法。[1]

注意:PHP 將所有以 __(兩個下劃線)開頭的類方法保留為魔術方法,所以在定義類方法時,除了上述魔術方法,建議不要以 __ 為前綴.

魔術方法中文說明

PHP面向對象有哪些魔術方法,每個魔術方法如何如何,請寫個測試類并運行

_construct($argv1,$argv2,...)

功能:類的構造方法,作用就是初始化對象

參數:任意多個,任意類型

返回值:無

__destruct()

功能:類的析構方法,對象被銷毀時被調用的,作用是釋放內存

參數:無

返回值:無

__get($name)

功能:當程序試圖調用一個未定義或者不可見的成員變量的時候就會自動調用該方法,這個時候程序試圖調用*的成員變量的返回值是該方法的返回值;

參數:$name為試圖調用的成員變量的名稱,這個參數的傳遞是PHP自動完成的;

返回值:類型(不確定)注意該方法可以設置成私有的(構造方法不要設置成私有的)。

__set($name,$value)魔術方法

功能:當程序試圖給一個未定義或者不可見的成員變量賦值的時候就會自動調用該方法;

參數:$name,$value分別表示試圖賦值的成員變量名稱和成員變量的值,這兩個參數的傳遞是PHP自動完成的;

返回值:這個方法不會返回值 注意該方法可以設置成私有的(構造方法不要設置成私有的)。

__isset($name)

功能:當用isset($name)檢測一個私有的成員變量的時候就會自動調用該方法,這個時候isset($name)的返回值就為該方法的返回值經過轉化的布爾值(<除“0”>非空的字符串,非零,true,有單元的數組將會轉化為true;0,"0",空*字符串,NULL,沒有單元的數組將會轉化為false);

參數:$name為試圖檢測的成員變量的名稱,這個參數的傳遞是PHP自動完成的;

返回值:類型(不確定)注意該方法可以設置成私有的(構造方法不要設置成私有的),當用isset()函數檢測的是公有的成員變量的時候可以直接檢測,如果沒有__isset()方法而直接檢測私有成員會得到不準確的結果即isset()會始終返回false;

_unset($name)

功能:當用unset($name)撤銷一個私有的成員變量的時候就會自動調用該方法;

參數:$name為試圖撤銷的成員變量的名稱,這個參數的傳遞是PHP自動完成的;

返回值:不能返回值,強制返回值將會出錯,當用unset()函數撤銷的是公有的成員變量的時候可以直接撤銷,如果沒有__unset()方法而直接撤銷私有成員不會成功;

__toString()

功能:當程度試圖輸出一個對象類型的變量的時候PHP會自動調用該方法;

參數:沒有參數,如果有會提示出錯;

返回值:字符型(該方法必須通過return返回一個字符串);

__clone()

功能:在用clone關鍵字克隆一個對象的時候PHP會自動調用這個方法,是為了給克隆出來的對象增添自己的屬性和方法;

參數:不用傳遞參數;

返回值:不用返回值;

_call($name,$argument)

功能:當程序試圖調用一個不存在的成員方法的時候會自動調用該方法;

參數:PHP將自動將調用的不存在的方法名傳遞給$name,不存在的方法中的參數整合為一個數組傳遞給*$argument;

返回值:不用返回值;

_sleep()

功能:使用serialize()函數時,如果實例化的對象中包含__sleep()方法,則會先執行__sleep()方法,該方法可以清除對象并返回該對象中所有變量的數組。使用__sleep()方法的目的是關閉對象可能具有的數據庫連接等類似的善后工作

參數:無需要傳遞參數

返回值:數組類型(Array)該對象中所有變量的數組

__wakeup()

功能:使用unserialize()函數重新還原一個被serialize()函數序列化的對象,__wakeup()方法則是恢復序列化中可能丟失的數據庫連接及相關工作

參數:無需要傳遞參數

返回值:----------------------------

__set_state($arr)

功能:可以通過var_export()來訪問類的靜態方法__set_state(),該方法必須是靜態的且必須返回一個對象

參數:$arr為一個數組

返回值:為一個對象

__autoload($class_name)

功能:在指定的路徑下自動查找并導入實例化需要使用的類

參數:$class_name為類名

返回值:*__callStatic($name,$argument)

功能:當程序試圖在靜態方法中調用一個未定義或者不可見的成員方法的時候會自動調用該方法;

參數:PHP將自動將調用的不存在的方法名傳遞給$name,不存在的方法中的參數整合為一個數組傳遞給$argument;

返回值:不用返回值;

注意:PHP5.3以上的版本支持該魔術方法

注意:__classStatic()方法必須被申明為public并且為static,否則會產生一個warning錯誤.

__invoke($x,$y,...)

功能:當嘗試以調用函數的方式調用一個對象時,__invoke 方法會被自動調用。

參數:以函數調用方法調用一個對象時傳遞的任意多個參數

返回值:不確定*

注意:PHP5.3以上的版本支持該魔術方法

魔術方法例子,代碼如下:

  1. <?php 
  2. class XuDianYang{ 
  3.  public $sex
  4.  public $age
  5.  private $girlfriend='xx'
  6.  public function __construct($sex,$age){ 
  7.   $this->sex=$sex
  8.   $this->age=$age
  9.  } 
  10.  public function __get($name){ 
  11.   echo __class__."::".$name."不存在或者不可見"
  12.  } 
  13.  public function __set($name,$value){ 
  14.   echo __class__."::".$name."由于不在在或者不可見,賦值失敗"
  15.  } 
  16.  public function __isset($name){ 
  17.   if(isset($this->$name)){ 
  18.    echo 1; 
  19.   }else
  20.    echo 0; 
  21.   } 
  22.  } 
  23.  public function __unset($name){ 
  24.   unset($this->$name); 
  25.  } 
  26.  public function __toString(){ 
  27.   return __class__; 
  28.  } 
  29.  public function __clone(){ 
  30.   $this->sex='女'
  31.  } 
  32.  public function __call($name,$argument){ 
  33.   echo "方法".__class__."::".$name."不存在"
  34.  } 
  35.  public function __sleep(){ 
  36.   echo "I'm sleeping"
  37.   foreach($this as $key=>$value){ 
  38.    $arr[]=$key
  39.   } 
  40.   return $arr
  41.  } 
  42.  public function __wakeup(){ 
  43.   echo "I wake up"
  44.  } 
  45.  public function __set_state($arr){ 
  46.   $obj=new CheShi(); 
  47.   $obj->var1=$arr['sex']; 
  48.   $obj->var2=$arr['age']; 
  49.   return $obj
  50.  } 
  51. function __autoload($name){ 
  52.  $class_path="./"
  53.  include_once($class_path.$name.".class.php"); 
  54. $xudianyang=new XuDianYang("男",21); 
  55. echo "<br/>"
  56. //正常訪問sex屬性 
  57. echo $xudianyang->sex; 
  58. echo "<br/>"
  59. //由于不存在weight屬性,將自動調用__get()方法 
  60. echo $xudianyang->weight; 
  61. echo "<br/>"
  62. //由于不可見(即私有),將自動調用__get()方法 
  63. $xudianyang->girlfriend; 
  64. echo "<br/>"
  65. //由于不存在,賦值失敗,自動調用__set()方法 
  66. $xudianyang->shengao="172cm"
  67. echo "<br/>"
  68. //檢測sex屬性是否存在,由于sex公有直接檢測 
  69. var_dump(isset($xudianyang->sex)); 
  70. echo "<br/>"
  71. //檢測girlfriend是否存在,由于girlfriend私有,所以自動調用__isset()方法 
  72. isset($xudianyang->girlfriend); 
  73. echo "<br/>"//開源軟件:Vevb.com 
  74. //撤消girlfriend,由于girlfriend私有,所以自動調用__unset()方法 
  75. //unset($xudianyang->girlfriend); 
  76. isset($xudianyang->girlfriend); 
  77. echo "<br/>"
  78. //直接輸出一個對象,自動調用__toString()方法 
  79. echo $xudianyang
  80. echo "<br/>"
  81. $xu=clone $xudianyang
  82. echo $xu->sex; 
  83. echo "<br/>"
  84. //由于調用不存在的方法,自動調用__call()方法 
  85. $xudianyang->walk(); 
  86. echo "<br/>"
  87. //序列化對象,自動調用__sleep()方法 
  88. $a=serialize($xudianyang); 
  89. echo "<br/>"
  90. echo "序列化的結果為:".$a
  91. //反序列化對象,自動調用__wakeup()方法 
  92. echo "<br/>"
  93. $b=unserialize($a); 
  94. //反序列化的結果 
  95. echo $b->sex; 
  96. echo "<br/>"
  97. eval('$c='.var_export($xudianyang,true).";"); 
  98. echo $c->var1; 
  99. ?> 
  100. CheShi.class.php 
  101. <?php 
  102. class CheShi{ 
  103.  public $var1
  104.  public $var2
  105. ?>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人亲热视频网站| 精品国产31久久久久久| 成人国产亚洲精品a区天堂华泰| 欧美视频国产精品| 国产精品自产拍在线观看| 亚洲老头老太hd| 精品国产老师黑色丝袜高跟鞋| 5278欧美一区二区三区| 亚洲欧美国产精品va在线观看| 91精品国产综合久久久久久久久| 亚洲性av在线| 欧美激情视频在线| 国产精品视频999| 国产精品福利观看| 欧美电影在线观看网站| 亚洲二区在线播放视频| 亚洲综合在线播放| 色偷偷88888欧美精品久久久| 国产精品久久久久久久久久久久久| 国产精品久久久久久久久男| 亚洲美女在线观看| 久久精品国产69国产精品亚洲| 日韩av观看网址| 国产在线精品成人一区二区三区| www日韩中文字幕在线看| 国产精品视频网址| 欧美视频在线免费看| 亚洲欧美日韩在线一区| 国产在线视频一区| 国产免费久久av| 日韩视频免费看| 久久国产精品99国产精| 亚洲第一天堂无码专区| 久久久影视精品| 日韩电影大片中文字幕| 66m—66摸成人免费视频| 久久久久久久久久久国产| 精品久久久国产精品999| 亚洲黄色免费三级| 欧美日韩日本国产| 九九热这里只有精品免费看| 国产成人拍精品视频午夜网站| 日韩精品在线免费| 欧美一级大片视频| 国内精品久久久久久影视8| 美女视频久久黄| 欧美日韩一区二区在线播放| 亚洲级视频在线观看免费1级| 亚洲国产精久久久久久久| 欧美另类在线观看| 日韩激情视频在线| 国产欧美日韩中文字幕在线| 97久久精品人搡人人玩| 久久久爽爽爽美女图片| 91av在线网站| 日韩美女中文字幕| 9.1国产丝袜在线观看| 国产精品久久久久久久久久ktv| 欧美日韩成人在线视频| 欧美激情国产高清| 亚洲免费av片| 亚洲美女免费精品视频在线观看| 91精品国产综合久久久久久蜜臀| 久热精品视频在线观看一区| 亚洲女人天堂成人av在线| 亚洲xxxxx电影| 亚洲人成电影网站色| 亚洲国产成人爱av在线播放| 91精品久久久久| 日韩中文字幕在线精品| 亚洲男人第一网站| 久久激情视频免费观看| 亚洲精品福利视频| 一区二区三区 在线观看视| 成人欧美在线观看| 九九热最新视频//这里只有精品| 国产成人精品av| 国产亚洲精品久久久久久| 国产精品视频精品视频| 欧美成人小视频| 91在线视频精品| 国产精品成人va在线观看| 欧美一级片免费在线| 亚洲二区中文字幕| 欧美激情在线播放| 亚洲福利视频久久| 亚洲日本成人女熟在线观看| 国产日韩在线看| 国产精自产拍久久久久久蜜| 国产精品∨欧美精品v日韩精品| 日韩天堂在线视频| 久久69精品久久久久久久电影好| 欧美性在线视频| 日韩a**站在线观看| 国产一区二区三区网站| 久久久精品在线| 国产成人精品综合| 成人午夜激情免费视频| 91精品国产综合久久香蕉922| 久久视频这里只有精品| 久久久成人精品视频| 热久久美女精品天天吊色| 亚洲综合在线做性| 国产91热爆ts人妖在线| 欧美在线一区二区三区四| 国产精品天天狠天天看| 日韩久久免费视频| 成人性教育视频在线观看| 亚洲国产一区二区三区四区| 91久久在线视频| 久久精品视频导航| 日韩欧美在线观看视频| 萌白酱国产一区二区| 青青草原成人在线视频| 日韩美女中文字幕| 欧美亚洲视频在线观看| 久久亚洲影音av资源网| 久久影院免费观看| 成人免费高清完整版在线观看| 国产精品h在线观看| 91视频国产一区| 亚洲一区二区三区777| 亚洲一区二区免费在线| 国产在线精品自拍| 日日摸夜夜添一区| 欧洲一区二区视频| 国产自产女人91一区在线观看| 欧美激情精品久久久久久免费印度| 成人乱色短篇合集| 国产精品69精品一区二区三区| 亚洲综合中文字幕在线观看| 国产美女久久久| 国产精品美女久久| 国产成人涩涩涩视频在线观看| 日韩成人激情视频| 国产午夜精品久久久| 亚洲欧美日韩中文在线| 91极品视频在线| 欧美亚洲国产成人精品| 亚洲国产精品福利| 欧美老肥婆性猛交视频| 色在人av网站天堂精品| 人人做人人澡人人爽欧美| 日韩久久精品电影| 成人黄色大片在线免费观看| 国产丝袜视频一区| 在线观看视频亚洲| 亚洲性线免费观看视频成熟| 久久久久久久久久国产精品| 欧美成人剧情片在线观看| 国产亚洲欧美aaaa| 欧美高清视频免费观看| 亚州欧美日韩中文视频| 精品毛片三在线观看| 97国产在线观看| 在线视频国产日韩| 国产成人精品av在线| 欧美激情精品久久久久久变态| 国产欧美婷婷中文| 欧美在线视频一区二区| 色哟哟入口国产精品| 91精品久久久久久久久久久久久| 亚洲色图综合久久| 日韩av电影在线免费播放|