⑴ php中怎麼使用call
__call是php語言里的一個魔術方法,其作用是:當調用的方法不存在時會自動調用這個方法。
語法:
function__call(string$function_name,array$arguments)
{
宏瞎......
}
該方握絕祥法有兩個參數,第一個參數$function_name會自動接收不存在的方法名,第二個$args則以數組的方段搏式接收不存在方法的多個參數。
在類裡面加入:
function__call($function_name,$args)
{
echo"你所調用的函數:$function_name(參數:<br/>";
var_mp($args);
echo")不存在!";
}
當調用一個不存在的方法時(如test()方法):
$p1=newPerson();
$p1->test(2,"test");
輸出的結果如下:
你所調用的函數:test(參數:
array(2){
[0]=>int(2)
[1]=>string(4)"test"
}
)不存在!
⑵ php中常用的魔術方法有哪些
php規定以兩個下劃線__開頭的方法都保留為魔術方法,建議自定義函數的函數名最好避開。
__construct() 實例化類時自動調用。
__destruct() 類對象使用結束時自動調用。
__set() 在給未定義的屬性賦值的時候調用。
__get() 調用未定義的屬性時候調用。
__isset() 使用isset()或empty()函數時候會調用。
__unset() 使用unset()時候會調用。
__sleep() 使用serialize序列化時候調用。
__wakeup() 使用unserialize反序列化的時候調用。
__call() 調用一個不存在的方法的時候調用。
__callStatic()調用一個不存在的靜態方法是調用。
__toString() 把對象轉換成字元串的時候會調用。比如 echo。
__invoke() 當嘗試把對象當方法調用時調用。
__set_state() 當使用var_export()函數時候調用。接受一個數組參數。
__clone() 當使用clone復制一個對象時候調用。
⑶ php魔術方法有哪些
1.constuct()構造函數
通常實例化完一個對象之後,都要對該對象的屬性進行初始化!在實例化一個對象的時候,PHP系統會自動的調用一個名字叫作construct()的方法,我們把這個方法叫作「構造方法」!
2.destruct()析構方法
與構造方法是一對,構造方法是在一個對象「出生」的時候由系統自動調用的,而析構方法是在一個對象「消失」的時候由系統自動調用的!
析構方法的名字叫destruct();注意裡面不能有任何的參數!
3.clone()克隆
觸發時機:是在克隆一個對象的時候,對新對象進行初始化的工作
4.autoload()自動載入類
當調用不存在的類的時候自動調用!
5.tostring()
當將對象當成字元串使用的時候自動調用
6.invoke()
當將對象當成函數使用的時候自動調用
7,set()
當對無法訪問的屬性賦值時自動調用(比如:類外調用私有屬性)
8.get()
當對獲取無法訪問的屬性值的時候自動調用
9.unset()
當銷毀無法訪問的屬性的時候自動調用
10.isset()
當判斷無法訪問的屬性是否存在的時候自動調用
11.call()
當調用無法訪問的普通方法時自動觸發
⑷ PHP8中的魔術方法-PHP8知識詳解
在PHP8中,魔術方法為開發者提供了更靈活的類行為定義方式,它們以兩個下劃線(__)開頭。通過魔術方法,可以實現如對象創建、方法調用、屬性訪問與修改等行為。以下為一些常見魔術方法的簡介:
__construct(): 類的構造函數。當對象創建時自動調用。
__destruct(): 類的析構函數。當對象銷毀時自動調用。
__get($name): 在嘗試讀取不可訪問屬性值時自動調用。
__set($name, $value): 在給不可訪問屬性賦值時自動調用。
__isset($name): 在調用isset()或empty()函數檢查不可訪問屬性時自動調用。
__unset($name): 在調用unset()函數刪除不可訪問屬性時自動調用。
__call($name, $arguments): 在調用不存在或不可訪問方法時自動調用。
__call static($name, $arguments): 在調用不存在或不可訪問靜態方法時自動調用。
__toString(): 在將對象作為字元串輸出時自動調用。
__invoke($arguments): 當嘗試將對象作為函數調用時自動調用。
__clone(): 當對象被克隆時自動調用。
__debugInfo(): 在使用var_mp()函數輸出對象信息時自動調用。
__serialize(): 在對象被序列化時自動調用。
__unserialize($data): 在對象被反序列化時自動調用。
__sleep(): 在對象被序列化時自動調用,返回要序列化的屬性列表。
__wakeup(): 在對象被反序列化時自動調用。
本文主要介紹兩個魔術方法:__set()和__get()。面向對象設計原則強調封裝性,不鼓勵直接訪問類屬性。通過使用__set()和__get(),可以間接訪問類屬性,避免直接訪問,提升代碼的可維護性和安全性。
當嘗試寫入未定義或不可見的成員變數時,會觸發__set()方法。該方法接收變數名稱和值作為參數。
在調用未定義或不可見的成員變數時,會觸發__get()方法。該方法接收要調用的變數名稱作為參數。
以下為使用__set()和__get()的參考代碼示例:
運行結果表明,嘗試訪問未定義成員變數時,會自動調用__set()和__get()方法,實現間接訪問類屬性的功能。