導航:首頁 > 編程語言 > php中的魔術方法

php中的魔術方法

發布時間:2025-02-10 17:57:46

① 如何在php類中執行某方法的時候自動執行另一個方法比如我執行數據插入的時候自動運行數據過濾的方法

PHP沒有事件機制。有一些模擬事件的方法,但我覺得代碼太繁瑣了,不實用。這里我向你推薦PHP的魔術方法。


魔術方法會在調用一個不存在或是非公有的方法之前,自動根據某種規則調用另外一個方法。比如下面的類就是了這樣:在調用insert方法時,判斷類中是否有before_insert方法。如果有則先調用before_insert方法,並檢查它的返回值,決定是否繼續調用insert。如果before_insert是一個過濾函數,如果驗證失敗就會返回false,insert插入就不會進行了。


如果不明白可以閱讀PHP手冊中介紹魔術方法的部分。

<?php
classMyClass{
//如果使用類的實例調用$method,但$method方法不是公有的,就會觸發此函數。
publicfunction__call($method,$args){
//檢查是否存在方法$method
if(method_exists($this,$method)){
$before_method='before_'+$method;
//檢查是否存在方法$before_method
if(method_exists($this,$before_method)){
//調用$before_method,檢查其返回值,決定是否跳過函數執行
if(call_user_func_array(array($this,$before_method),$args)){
retruncall_user_func_array(array($this,$method),$args)
}
}else{
//$before_method不存在,直接執行函數
retruncall_user_func_array(array($this,$method),$args)
}
}else{
thrownewException('nosuchmethod'.$method);
}
}

//注意這里不要寫成public
privatefunctioninsert(){}

//低調!不要寫出公有的
privatefunctionbefore_insert(){}
}

$myobj=MyClass;
$myobj->insert('mytable',array('name'=>'2012'));

② 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中怎麼使用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魔術方法有哪些

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()
當調用無法訪問的普通方法時自動觸發

閱讀全文

與php中的魔術方法相關的資料

熱點內容
美國好的源碼出售 瀏覽:323
蘋果ipad文件夾怎麼添加文字 瀏覽:481
騰訊雲連接自己的伺服器地址 瀏覽:216
碩士英語綜合教程pdf 瀏覽:46
分段加密的安全性 瀏覽:507
咪咕直播為什麼沒有適配安卓系統 瀏覽:172
php模版大全 瀏覽:102
沒車能解壓嗎 瀏覽:634
php開發oa系統源碼 瀏覽:759
怎麼安裝蘋果ios的app 瀏覽:581
app拉新如何機刷 瀏覽:480
zendeclipseforphp 瀏覽:480
同時有幾個微信如何加密微信 瀏覽:86
大眾20t壓縮比 瀏覽:566
程序員要記住的500個單詞 瀏覽:830
wq快捷方式在哪個文件夾 瀏覽:965
雲南到河北源碼 瀏覽:92
安卓手機怎麼玩造夢3 瀏覽:60
多玩我的世界盒子怎麼創造伺服器地址 瀏覽:986
手機如何下載米家app 瀏覽:96