PHP的拦截器实例分析
本文实例讲述了PHP的拦截器用法。分享给大家供大家参考。具体如下:
PHP提供了几个拦截器,用于在访问未定义的方法和属性时被调用,如下所示:
1、__get($property)
功能:访问未定义的属性是被调用
2、__set($property,$value)
功能:给未定义的属性设置值时被调用
3、__isset($property)
功能:对未定义的属性调用isset()时被调用
4、__unset($property)
功能:对未定义的属性调用unset()时被调用
5、__call($method,$arg_array)
功能:调用未定义的方法时被调用
下面将通过一个小程序来说明这些拦截器的用途:
classintercept_demo{ private$xingming=""; private$age=10; //若访问一个未定义的属性,则将调用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; } } functiontestIsset(){ returnisset($this->Name); } functiongetName(){ return$this->xingming; } functionsetName($value){ $this->xingming=$value; } functionissetName(){ return!is_null($this->xingming); } functionunsetName(){ $this->xingming=NULL; } }
$intercept=newintercept_demo(); echo"设置属性Name为Li"; $intercept->Name="Li"; echo"\$intercept->Name={$intercept->Name}"; echo"isset(Name)={$intercept->testIsset()}"; echo""; echo"清空属性Name值"; unset($intercept->Name); echo"\$intercept->Name={$intercept->Name}"; echo""; echo"调用未定义的getAge函数"; echo"age={$intercept->getAge()}";