当前位置:首页 > PHP教程 > php应用 > 列表

PHP的拦截器实例分析

发布:smiling 来源: PHP粉丝网  添加日期:2021-04-22 10:42:26 浏览: 评论:0 

这篇文章主要介绍了PHP的拦截器,以实例形式分析了常见的各类拦截器的用法,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了PHP的拦截器用法。分享给大家供大家参考。具体如下:

PHP提供了几个拦截器,用于在访问未定义的方法和属性时被调用,如下所示:

1、__get($property)

功能:访问未定义的属性是被调用

2、__set($property, $value)

功能:给未定义的属性设置值时被调用

3、__isset($property)

功能:对未定义的属性调用isset()时被调用

4、__unset($property)

功能:对未定义的属性调用unset()时被调用

5、__call($method, $arg_array)

功能:调用未定义的方法时被调用

下面将通过一个小程序来说明这些拦截器的用途:

  1. class intercept_demo{ 
  2.     private $xingming = ""
  3.     private $age = 10; 
  4.    
  5.     // 若访问一个未定义的属性,则将调用get{$property}对应的方法 
  6.     function __get($property){ 
  7.         $method = "get{$property}"
  8.         if (method_exists($this$method)){ 
  9.             return $this->$method(); 
  10.         } 
  11.     } 
  12.     // 若给一个未定义的属性设置值,则将调用set{$property}对应的方法 
  13.     function __set($property$value){ 
  14.         $method = "set{$property}"
  15.         if (method_exists($this$method)){ 
  16.             return $this->$method($value); 
  17.         }   
  18.     } 
  19.    
  20.     // 若用户对未定义的属性调用isset方法, 
  21.     function __isset($property){ 
  22.         $method = "isset{$property}"
  23.         if (method_exists($this$method)){ 
  24.             return $this->$method(); 
  25.         } 
  26.     } 
  27.    
  28.     // 若用户对未定义的属性调用unset方法, 
  29.     // 则认为调用对应的unset{$property}方法 
  30.     function __unset($property){ 
  31.         $method = "unset{$property}"
  32.         if (method_exists($this$method)){ 
  33.             return $this->$method(); 
  34.         } 
  35.     } 
  36.    
  37.     function __call($method$arg_array){ 
  38.         if (substr($method,0,3)=="get"){ 
  39.             $property = substr($method,3); 
  40.             $property = strtolower(substr($property,0,1)).substr($property,1); 
  41.             return $this->$property
  42.         } 
  43.     } 
  44.    
  45.     function testIsset(){ 
  46.         return isset($this->Name); 
  47.     } 
  48.    
  49.     function getName(){ 
  50.         return $this->xingming; 
  51.     } 
  52.    
  53.     function setName($value){ 
  54.         $this->xingming = $value
  55.     } 
  56.    
  57.     function issetName(){ 
  58.         return !is_null($this->xingming); 
  59.     } 
  60.    
  61.     function unsetName(){ 
  62.         $this->xingming = NULL; 
  63.     } 
  64.  
  65. $intercept = new intercept_demo(); 
  66. echo "设置属性Name为Li"
  67. $intercept->Name = "Li"
  68. echo "\$intercept->Name={$intercept->Name}"
  69. echo "isset(Name)={$intercept->testIsset()}"
  70. echo ""
  71. echo "清空属性Name值"
  72. unset($intercept->Name); 
  73. echo "\$intercept->Name={$intercept->Name}"
  74. echo "";//www.phpfensi.com 
  75. echo "调用未定义的getAge函数"
  76. echo "age={$intercept->getAge()}"

希望本文所述对大家的PHP程序设计有所帮助。

Tags: PHP拦截器

分享到:

相关文章