在程序开发中,如果在使用对象调用对象内部方法时候,调用的这个方法不存在那么程序就会出错,然后程序退出不能继续执行。那么可不可以在程序调用对象内部 不存在的方法时,提示我们调用的方法及使用的参数不存在,但程序还可以继续执行,这个时候我们就要使用在调用不存在的方法时自动调用的方 法“__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()函数