php中的常用魔術(shù)方法匯總
這篇文章詳細的對php中的常用魔術(shù)方法進行了整理歸納,分享給大家供大家參考,具體內(nèi)容如下
1、PHP把所有”__”開頭的方法當做魔術(shù)方法,所以任何自定義的方法都不能是”__”開頭
php提供的重載,是指動態(tài)的創(chuàng)建屬性或方法。重載是通過魔術(shù)方法來實現(xiàn)的。這些魔術(shù)方法的參數(shù)不能飲用傳遞,__get(),__set(),__isset(),__unset(),實現(xiàn)類屬性重載。
2、當訪問類中不可訪問的屬性時,將調(diào)用__get()方法
3、當訪問類中不可訪問的屬性時,根據(jù)不同的情況會調(diào)用__get(),__set(),__isset(),__unset(),其中當訪問屬性 時,使用函數(shù)isset()或empty()時,將調(diào)用__isset()方法使用unset()函數(shù)時,將調(diào)用__unset()方法。
4、這四個方法不能使用static關(guān)鍵詞定義,在php5.3.0后,一個warning級別的警告將發(fā)生,當使用static方法定義這4個方法。
5、何謂不可訪問的屬性:(1)類中沒有的屬性,(2)私有變量在類外被訪問。方法重載,通過__call()和__callstatic()來實 現(xiàn),兩者的區(qū)別是一個上下文環(huán)境是否是靜態(tài)方法,后者在調(diào)用不可訪問的靜態(tài)方法時會被調(diào)用。__callstatic()是在php5.3.0中才被添 加。
6、__sleep()和__wakeup()
serialize()序列化時,會先檢查是否存在__sleep()函數(shù),如果存在,則先調(diào)用__sleep(),返回一個包含所有變量名稱的數(shù)組,如果該方法不返回任何內(nèi)容,則null被序列化,并產(chǎn)生一個notice級別的錯誤。
__wakeup()方法和__sleep()相反,在調(diào)用unserialize()時被調(diào)用
7、__toString(),讓一個類決定它如何轉(zhuǎn)換成字符串,在php5.2.0之前,這個方法只能結(jié)合echo或print方法生效,php5.2.0之后,可以結(jié)合printf()修飾,但修飾的時候也不能用類似%d之類的非字符修飾符。
8、__invoke(),當嘗試以調(diào)用函數(shù)的方式調(diào)用對象時,將出發(fā)這個函數(shù),只在php5.3之后生效。
9、__set_state()靜態(tài)方法,當調(diào)用var_export()的時候,才會調(diào)用這個靜態(tài)方法,php5.1.0之后生效。唯一參數(shù)是接收一個數(shù)組。
10、__construct()和__destruct(),構(gòu)造函數(shù)和析構(gòu)函數(shù),構(gòu)造函數(shù)主要用于類的初始化,析構(gòu)函數(shù)在某個對象的所有引用都 刪除后或者對象被顯示的銷毀時運行。在析構(gòu)函數(shù)中不允許拋出異常,否則會出發(fā)一個fatal error,析構(gòu)函數(shù)在腳本結(jié)束時調(diào)用,此時所有的http header都已經(jīng)發(fā)出.
11、__clone(),對象復(fù)制,此方法不能直接被調(diào)用,必須通過clone關(guān)鍵字顯示調(diào)用
代碼:
//實例化對象時,會調(diào)用對象的__construct方法 $obj = new Object(); //給對象不存在的屬性賦值時,會調(diào)用對象的__set方法 $obj->title = "hello"; //使用對象不存在的屬性時,會調(diào)用對象的__get方法 echo $obj->title; //調(diào)用對象不存在的方法時,會調(diào)用對象的__call方法 $obj->test("hello",123,567); //調(diào)用不存在的類靜態(tài)方法時,會調(diào)用類的__callStatic方法 Object::staticMethod("static","not found method"); //直接輸出對象時,會調(diào)用對象的__toString方法 echo $obj; //將一個對象當作函數(shù)一樣使用時,會調(diào)用對象的__invoke方法 echo $obj("test"); //克隆對象時,會調(diào)用對象的__clone方法 $obj2 = clone $obj; //判斷對象屬性是否存在時,會調(diào)用對象的__isset方法 var_dump(isset($obj->aaa)); //銷毀對象屬性時,會調(diào)用對象的__unset方法 unset($obj->aaa); class Object{ protected $array = array(); function __construct() { echo __METHOD__."你正在實例化對象<br>"; } function __set($name, $value) { $this->array[$name]=$value; } function __get($name) { return $this->array[$name]; } function __call($name, $arguments) { var_dump($name,$arguments); return "magic function\n"; } static function __callStatic($name, $arguments) { var_dump($name,$arguments); return "magic static function"; } function __toString() { return __CLASS__.'<br>'; } function __invoke($arguments) { var_dump($arguments); return __METHOD__.'<br>'; } function __clone() { echo __METHOD__."你正在克隆對象<br>"; } function __isset($name) { echo __METHOD__."你想判斷有沒有屬性".$name."<br>"; return 1; } function __unset($name) { echo __METHOD__."你想刪除屬性".$name."<br>"; } function __destruct() { echo __METHOD__."你正在注銷對象<br>"; } }
以上就是關(guān)于php中的常用魔術(shù)方法的全部內(nèi)容,希望對大家的學(xué)習有所幫助。
- php 魔術(shù)方法使用說明
- 詳解php的魔術(shù)方法__get()和__set()使用介紹
- php中的常用魔術(shù)方法總結(jié)
- 深入PHP5中的魔術(shù)方法詳解
- PHP 5.3新增魔術(shù)方法__invoke概述
- PHP類中的魔術(shù)方法(Magic Method)簡明總結(jié)
- php面向?qū)ο笾械哪g(shù)方法中文說明
- ThinkPHP查詢中的魔術(shù)方法簡述
- PHP魔術(shù)方法__ISSET、__UNSET使用實例
- PHP魔術(shù)方法__GET、__SET使用實例
- php魔術(shù)方法與魔術(shù)變量、內(nèi)置方法與內(nèi)置變量的深入分析
- PHP中的魔術(shù)方法總結(jié)和使用實例
- php魔術(shù)方法功能與用法實例分析
相關(guān)文章
在Linux系統(tǒng)的服務(wù)器上隱藏PHP版本號的方法
這篇文章主要介紹了在Linux系統(tǒng)的服務(wù)器上隱藏PHP版本號的方法,有助于預(yù)防攻擊者針對PHP詳細版本的漏洞而發(fā)起的攻擊,需要的朋友可以參考下2015-06-06php合并數(shù)組array_merge函數(shù)運算符加號與的區(qū)別
“+”運算符和array_merge():array array_merge ( array array1, array array2 [, array ...] ) 都可以合并多個數(shù)組,但使用過程中有一點小區(qū)別。2008-10-10PHP目錄函數(shù)實現(xiàn)創(chuàng)建、讀取目錄教程實例
今天主要介紹在PHP網(wǎng)站開發(fā)中文件目錄函數(shù)的應(yīng)用。2011-01-01PHP基于ffmpeg實現(xiàn)轉(zhuǎn)換視頻,截圖及生成縮略圖的方法
這篇文章主要介紹了PHP基于ffmpeg實現(xiàn)轉(zhuǎn)換視頻,截圖及生成縮略圖的方法,涉及php使用ffmpeg針對視頻文件的截圖、生成縮略圖等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08