在程序開發中,如果在使用對象調用對象內部方法時候,調用的這個方法不存在那么程序就會出錯,然后程序退出不能繼續執行。那么可不可以在程序調用對象內部 不存在的方法時,提示我們調用的方法及使用的參數不存在,但程序還可以繼續執行,這個時候我們就要使用在調用不存在的方法時自動調用的方 法“__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