php拥有自己内置的拦截器方法,可以拦截发送到未定义方法和属性的消息,也叫作重载。
PHP5有三个内置的拦截器方法。他们的用法和__construct()方法一样,遇到合适的条件就被调用。
方法 | 描述 |
---|---|
__get() | 访问未定义的属性是被调用 |
__set() | 给未定义的属性设置时被调用 |
__isset() | 对未定义的属性调用isset()时调用 |
__unset() | 对未定义的属性调用unset()时调用 |
__call() | 调用未定义的方法时调用 |
__get()与__set()方法用于处理类中未申明的属性。
当客户端代码试图访问未申明的属性时,__get()会被调用,并带着一个要访问该属性名称的字符串参数。无论该方法返回了啥,都会发送给客户端。举例:
<?php
class PropertyTest {
public function __get($name)
{
echo '1';
}
public function __set($name, $value)
{
echo $name . ' is ' . $value;
}
}
$obj = new PropertyTest;
echo $obj->a;
$obj->b = 'ada';
echo $obj->b;
以上会输出: 1
b is ada;
当客户端要调用类中未定义的方法时,__call()会被调用。__call()接受2个参数,一个是方法的名称,另一个是传递给要调用方法的所有参数(数组),他所返回的任何值都会返回给客户,就像调用一个真实存在的方法。