PHP 有如下几个拦截器:
1、__get($property)
功能:访问未定义的属性是被调用
2、__set($property, $value)
功能:给未定义的属性设置值时被调用
3、__isset($property)
功能:对未定义的属性调用 isset()时被调用
4、__unset($property)
功能:对未定义的属性调用 unset()时被调用
5、__call($method, $arg_array)
功能:调用未定义的方法时被调用
“
”
拦截器,顾名思义,它就 拦截 未定义的属性和方法,有点类似__autoload 和
__construct 等方法,应用案例如下(摘自网络):
1. // 若访问一个未定义的属性,则将调用 get{$property}对应的方法
2.
function
__get
(
$property
){
3. $method
=
"get{$property}"
;
4.
if
(
method_exists
(
$this
,
$method
)){
5.
return
$this
->
$method
();
6.
}
7.
}
8.
9.
// 若给一个未定义的属性设置值,则将调用 set{$property}对应的方法
10.
function
__set
(
$property
,
$value
){
11. $method
=
"set{$property}"
;
12.
if
(
method_exists
(
$this
,
$method
)){
13.
return
$this
->
$method
(
$value
);
14.
}
15.
}
16.
17.
// 若用户对未定义的属性调用 isset 方法,
18.
function
__isset
(
$property
){
19. $method
=
"isset{$property}"
;
20.
if
(
method_exists
(
$this
,
$method
)){
21.
return
$this
->
$method
();
22.
}
23.
}
24.
25.
// 若用户对未定义的属性调用 unset 方法,
26.
// 则认为调用对应的 unset{$property}方法