萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP中的魔術方法總結和使用實例

PHP中的魔術方法總結和使用實例

   這篇文章主要介紹了PHP中的魔術方法總結和使用實例,魔術方法是PHP面向對象中特有的特性,它們在特定的情況下被觸發,都是以雙下劃線開頭,你可以把它們理解為鉤子,需要的朋友可以參考下

  魔術方法是PHP面向對象中特有的特性。它們在特定的情況下被觸發,都是以雙下劃線開頭,你可以把它們理解為鉤子,利用模式方法可以輕松實現PHP面向對象中重載(Overloading即動態創建類屬性和方法)。魔術方法很多還是成對出現的,以下列出目前PHP中所有的模式方法。

  1.__construct,__destruct

  __constuct構建對象的時被調用;

  __destruct明確銷毀對象或腳本結束時被調用;

  2.__get,__set

  __set當給不可訪問或不存在屬性賦值時被調用

  __get讀取不可訪問或不存在屬性時被調用

  3.__isset,__unset

  __isset對不可訪問或不存在的屬性調用isset()或empty()時被調用

  __unset對不可訪問或不存在的屬性進行unset時被調用

  4.__call,__callStatic

  __call調用不可訪問或不存在的方法時被調用

  __callStatic調用不可訪問或不存在的靜態方法時被調用

  5.__sleep,__wakeup

  __sleep當使用serialize時被調用,當你不需要保存大對象的所有數據時很有用

  __wakeup當使用unserialize時被調用,可用於做些對象的初始化操作

  6.__clone

  進行對象clone時被調用,用來調整對象的克隆行為

  7.__toString

  當一個類被轉換成字符串時被調用

  8.__invoke

  當以函數方式調用對象時被調用

  9.__set_state

  當調用var_export()導出類時,此靜態方法被調用。用__set_state的返回值做為var_export的返回值。

  10.__debuginfo

  當調用var_dump()打印對象時被調用(當你不想打印所有屬性)適用於PHP5.6版本

  PHP魔術方法使用實例如下:

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 <?php   class Magic { public $var = 'test';   //構造函數,在創建對象的時候調用 public function __construct() { echo '__construct called'.PHP_EOL; }   //某個對象的引用都被刪除、對象被銷毀、調用exit()後、腳本關閉時被調用 public function __destruct() { echo '__destruct called'.PHP_EOL; }   //當給不可訪問或不存在屬性賦值時被調用 public function __set($name, $value) { echo $name.'-'.$value; echo '__set called'.PHP_EOL; }   //讀取不可訪問或不存在屬性時被調用 public function __get($name) { echo $name; echo '__get called'.PHP_EOL; }   //調用不可訪問或不存在的方法時被調用 public function __call($name, $arguments) { echo $name . '-' . implode(',', $arguments); echo '__call called'.PHP_EOL; }   //調用不可訪問或不存在的靜態方法時被調用 public static function __callStatic($name, $arguments) { echo $name . '-' . implode(',', $arguments); echo '__callStatic called'.PHP_EOL; }   //對不可訪問或不存在的屬性調用isset()或empty()時被調用 public function __isset($name) { echo $name; echo '__isset called'.PHP_EOL; return true; }   //對不可訪問或不存在的屬性進行unset時被調用 public function __unset($name) { echo $name; echo '__unset called'.PHP_EOL; }   //serialize時被調用,當你不需要保存大對象的所有數據時很有用 public function __sleep() { echo '__sleep called'.PHP_EOL; return array('var1111111111'); }   //unserialize時被調用,可用於做些對象的初始化操作 public function __wakeup() { echo '__wakeup called'.PHP_EOL; $this->var = 'test after wakeup'; }   //當一個類被轉換成字符串時被調用 public function __toString() { return '__toString called'.PHP_EOL; }   //進行對象clone時被調用,用來調整對象的克隆行為 public function __clone() { echo '__clone called'.PHP_EOL; }   //當以函數方式調用對象時被調用 public function __invoke() { echo '__invoke called'.PHP_EOL; }   //當調用var_export()導出類時,此靜態方法被調用。用__set_state的返回值做為var_export的返回值。 public static function __set_state($arr) { return '__set_state called'.PHP_EOL; }   //當調用var_dump()打印對象時被調用(當你不想打印所有屬性)適用於PHP5.6版本 public function __debuginfo($arr) { echo '__debuginfo called'.PHP_EOL; return array( 'var' => 'test fro __debuginfo' ); } }   $m = new Magic(); //__construct()被調用 $m->not_exist_property = test; //__set()被調用 echo $m->not_exist_property;//_
copyright © 萬盛學電腦網 all rights reserved