您好,登錄后才能下訂單哦!
<?php /* * 官方文檔:http://php.net/manual/zh/language.oop5.magic.php */ class magic { public $a = array(1); protected $b = array(2); private $c = array(3); public $d = '88'; public $e = array('huazi'=>55); /** * 構造方法 * 當類被實力化時就會被出發此方法 * 該方法就不用演示了 */ function __construct() { echo '構造方法:__construct()<br>'; } /** * 對象被序列化時會先出發此方法 * 如果沒有此魔術方法 會把 類屬性 $a,$b,$c 序列化 * 此方法可以指定那些屬性被序列化 */ public function __sleep() { return array( 'a' , 'b' ); } /** * 對象被反序列化時會先出發此方法 */ public function __wakeup() { echo 1; } /** * 方法用于一個類被當成字符串時應怎樣回應。例如 echo $obj; 應該顯示些什么。 * 此方法必須返回一個字符串,否則將發出一條 E_RECOVERABLE_ERROR 級別的致命錯誤 */ public function __toString() { return 'echo 對象?<br>'; } /** * 自 PHP 5.1.0 起當調用 var_export() 導出類時,此靜態 方法會被調用。 * 本方法的唯一參數是一個數組,其中包含按 array('property' => value, ...) 格式排列的類屬性。 */ public static function __set_state($array) { return $array['d']; } /** * PHP 5 引入了析構函數的概念,這類似于其它面向對象的語言, * 如 C++。析構函數會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行。 * * 該方法就不用演示了 */ public function __destruct() { //echo 55; } /** * 在對象中調用一個不可訪問方法時,__call() 會被調用 */ public function __call($name, $arguments) { echo '__call() : '; // 注意: $name 的值區分大小寫 var_dump($name); var_dump($arguments); echo '<br>'; if( $name == 'abc' ) { $this->$name(); } } private function abc() { echo '999<br>'; } /** * 用靜態方式中調用一個不可訪問方法時,__callStatic() 會被調用。 */ public static function __callStatic ( $name , $arguments ) { echo '__callStatic() : '; // 注意: $name 的值區分大小寫 var_dump($name); var_dump($arguments); echo '<br>'; } /** * 在給不可訪問屬性賦值時,__set() 會被調用。 */ public function __set( $name,$val ) { echo '__set : 方法<br>'; $this->$name = $val; } /** * 讀取不可訪問屬性的值時,__get() 會被調用。 */ public function __get( $name ) { echo '__get : 方法<br>'; return $this->$name; } /** * 判斷屬性是否存在時被調用 */ public function __isset($name) { echo '__isset : 方法<br>'; return isset( $this->e[$name] ); } /** * 當對不可訪問屬性調用 unset() 時,__unset() 會被調用。 */ public function __unset($name) { echo '__unset : 方法<br>'; unset( $this->$name ); var_dump($name); } /** * 對象被克隆時被調用的 */ public function __clone() { echo '__clone : 方法'; echo ': 被克隆了<br>'; } /** * 當嘗試以調用函數的方式調用一個對象時,__invoke() 方法會被自動調用。 */ public function __invoke ( $x ) { echo '__invoke : 方法 <br>'; var_dump ( $x ); } } $ob = new magic(); /** * __sleep() 事例 * var_dump(serialize($ob)); */ /** * __wakeup 事例 * $ser = serialize($ob); * unserialize($ser); */ /** * __toString 事例 * echo $ob; */ /** * __set_state 事例 手冊里 * eval('$b = '.var_export($ob,true).';'); * var_dump($b); */ /** * __call 事例 * $ob->meiyou(); * $ob->abc(1,2); */ /** * __callStatic 事例 * magic::kao(22); */ /** * __set 事例 * print_r($ob); * $ob->c=2; * print_r($ob); */ /** * __get 事例 * print_r($ob->c); */ /** * __isset 事例 * var_dump( isset($ob->huazi) ); */ /** * __unset 事例 * unset($ob->b); * print_r($ob); */ /** * __clone 事例 * $c = clone $ob; */ /** * __invoke 事例 * $ob('hehe'); */ class a{ function __construct(){ } function __destruct(){ } function __call( $name,$val ){ } static function __callStatic($name, $arguments) { } function __get($name){ } function __set($name,$val){ } function __unset($name){ } function __isset($name){ } function __toString() { } function __set_state($array) { } function __invoke(){ } function __clone(){ } function __sleep(){ } function __wakeup(){ } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。