在程序開發中,如果在使用對象調用對象內部方法時候,調用的這個方法不存在那么程序就會出錯,然后程序退出不能繼續執行。那么可不可以在程序調用對象內部 不存在的方法時,提示我們調用的方法及使用的參數不存在,但程序還可以繼續執行,這個時候我們就要使用在調用不存在的方法時自動調用的方 法“__call()”。
~~~
1 <?php
2 //這是一個測試的類,里面沒有屬性和方法
3 class Test
4 {
5
6 }
7
8 //產生一個Test類的對象
9 $test = new Test();
10
11 //調用對象里不存在的方法
12 $test->demo("one", "two", "three");
13
14 //程序不會執行到這里
15 echo "this is a test<br>";
16 ?>
~~~
上例出現如下錯誤,程序通出不能繼續執行
`1 Fatal error: Call to undefined method Test::demo()`
下面我們加上“__call()”方法,這個方法有2個參數,第一個參數為調用不存在的方法過程中,自動調用__call()方法時,把這個不存在的方法的方法名傳給第一個參數,第二個參數則是把這個方法的多個參數以數組的形式傳進來。
~~~
1 <?php
2 //這是一個測試的類,里面沒有屬性和方法
3 class Test
4 {
5 //調用不存的方法時自動調用的方法,第一個參數為方法名,第二個參數是數組參數
6 function __call($function_name, $args) {
7
8 print "你所調用的函數:$function_name(參數:";
9 print_r($args);
10 echo ")不存在!<br>
11 ";
12 }
13 }
14
15 //產生一個Test類的對象
16 $test=new Test();
17
18 //調用對象里不存在的方法
19 $test->demo("one", "two", "three");
20
21 //程序不會退出可以執行到這里
22 echo "this is a test<br>";
23 ?>
~~~
上例輸出結果為:
你所調用的函數: demo(參數:Array ( [0] => one [1] => two [2] => three ) )不存在!
this is a test
- 1.什么是面向對象
- 2.什么是類,什么是對象,類和對象這間的關系
- 3.什么是面向對象編程呢
- 4.如何抽象出一個類
- 5.如何實例化對象
- 6.如何去使用對象中的成員
- 7.特殊的引用this的使用
- 8.構造方法__construct()與析構方法__destruct()
- 9.封裝性(var與public,protected,private的關系)
- 10.__set(),__get(),__isset(),__unset()四個方法的應用
- 11.類的繼承
- 12.重載新的方法(parent::)
- 13.訪問類型(public,protected,private)
- 14.final關鍵字的應用
- 15.static和const關鍵字的使用(self::)
- 16.__toString()方法
- 17.克隆對象__clone()方法
- 18.__call()處理調用錯誤
- 19.抽象方法和抽象類(abstract)
- 20.PHP5接口技術(interface)
- 21.多態的應用
- 22.把對象串行化serialize()方法,__sleep()方法,__wakeup()方法
- 23.自動加載類 __autoload()函數