当调用一个不可访问的方法(如未定义,或不可见)时,__cal()会被调用。比如:
```
<?php
/**
* User: 三千
* Date: 16/3/16
* Time: 上午11:00
*/
class Account{
public function __call($name,$arguments){
switch(count($arguments)){
case 2:
echo $arguments[0] * $arguments[1],PHP_EOL;
break;
case 3:
echo array_sum($arguments),PHP_EOL;
break;
default:
echo '参数不对',PHP_EOL;
break;
}
}
}
$a = new Account();
$a->make(5);
$a->make(5,6);
```
返回结果:
```
% php 1.2.3.php
参数不对
30
```
其中$name参数是要调用的方法名称。$arguments参数是一个数组,包含着要传递给方法的参数。
上面代码模拟了其他语言中根据参数类型进行重载。跟__call方法配套的魔术方法是__callStatic。
__call的本意并不是防止调用不存在的方法而报错,而是为了使方法的动态创建变成可能,在MVC框架设计中是很有用的语法。
- 空白目录
- 第1章 面向对象思想的核心概念
- 1.1 面向对象的“形”与“本”
- 1.1.1 对象的“形”
- 1.1.2 对象的“本质”
- 1.1.3 对象与数组
- 1.1.4 对象与类
- 1.2 魔术方法的应用
- 1.2.1 construct和destruct方法
- 1.2.2 set和get方法
- 1.2.3 call和callStatic方法
- 1.2.4 __toString方法
- 1.3 继承与多态
- 1.3.1 类的组合与继承
- 1.3.2 各种语言中的多态
- 1.4 面向接口编程
- 1.4.1 接口的作用
- 1.4.2 对接口的思考
- 1.5 反射
- 1.5.1 如何使用反射API
- 1.6 异常和错误处理
- 1.6.1 如何使用异常处理机制
- 1.6.2 怎样看PHP的异常
- 1.6.3 PHP中的错误级别
- 1.6.4 PHP中的错误处理机制
- 1.7 本章小结
- 第2章 面向对象的设计原则
- 2.1 面向对象设计的五大原则
- 2.2 一个面向对象留言本的实例
- 2.3 面向对象的思考
- 2.4 本章小结
- 第3章 正则表达式基础与应用
- 3.1 认识正则表达式
- 3.2 正则表达式中的元字符
- 3.3 正则表达式匹配规则
- 3.4 构造正则表达式
- 3.5 正则在实际开发中的应用
- 3.6 正则表达式的效率与优化
- 3.7 本章小结