在程序開發中,如果在使用對象調用對象內部方法時候,調用的這個方法不存在那么程序就會出錯,然后程序退出不能繼續執行。那么可不可以在程序調用對象內部 不存在的方法時,提示我們調用的方法及使用的參數不存在,但程序還可以繼續執行,這個時候我們就要使用在調用不存在的方法時自動調用的方 法“__call()”。
<?php
// 這是一個測試的類,里面沒有屬性和方法
class Test {
}
// 產生一個Test類的對象
$test = new Test();
// 調用對象里不存在的方法
$test->demo("one", "two", "three");
// 程序不會執行到這里
echo "this is a test<br>";
?>
上例出現如下錯誤,程序通出不能繼續執行;
Fatal error: Call to undefined method Test::demo()
下面我們加上“__call()”方法,這個方法有2個參數,第一個參數為調用不存在的方法過程中,自動調用__call()方法時,把這個不存在的方法的方法名傳給第一個參數,第二個參數則是把這個方法的多個參數以數組的形式傳進來。
<?php
// 這是一個測試的類,里面沒有屬性和方法
class Test {
// 調用不存的方法時自動調用的方法,第一個參數為方法名,第二個參數是數組參數
function __call($function_name, $args) {
print "你所調用的函數:$function_name(參數:";
print_r($args);
echo ")不存在!<br>";
}
}
// 產生一個Test類的對象
$test = new Test();
// 調用對象里不存在的方法
$test->demo("one", "two", "three");
// 程序不會退出可以執行到這里
echo "this is a test<br>";
?>
上例輸出結果為:
你所調用的函數: demo(參數:Array ( [0] => one [1] => two [2] => three ) )不存在!
this is a test
