PHP有如下几个拦截器:
1、__get($property) 功能:访问未定义的属性是被调用 2、__set($property, $value) 功能:给未定义的属性设置值时被调用 3、__isset($property) 功能:对未定义的属性调用isset()时被调用 4、__unset($property) 功能:对未定义的属性调用unset()时被调用 5、__call($method, $arg_array) 功能:调用未定义的方法时被调用
拦截器,顾名思义,它就“拦截”未定义的属性和方法,有点类似__autoload和__construct等方法,应用案例如下(摘自网络):
- // 若访问一个未定义的属性,则将调用get{$property}对应的方法
-
function __get($property){
-
$method ="get{$property}";
-
if(method_exists($this, $method)){
-
return $this->$method();
- }
- }
-
- // 若给一个未定义的属性设置值,则将调用set{$property}对应的方法
-
function __set($property, $value){
-
$method ="set{$property}";
-
if(method_exists($this, $method)){
-
return $this->$method($value);
- }
- }
-
- // 若用户对未定义的属性调用isset方法,
-
function __isset($property){
-
$method ="isset{$property}";
-
if(method_exists($this, $method)){
-
return $this->$method();
- }
- }
-
- // 若用户对未定义的属性调用unset方法,
- // 则认为调用对应的unset{$property}方法
-
function __unset($property){
-
$method ="unset{$property}";
-
if(method_exists($this, $method)){
-
return $this->$method();
- }
- }
-
-
function __call($method, $arg_array){
-
if(substr($method,0,3)=="get"){
-
$property = substr($method,3);
-
$property = strtolower(substr($property,0,1)).substr($property,1);
-
return $this->$property;
- }
- }
|
请发表评论