php中__get()和__set()用法介绍

想要对对象的属性进行一些设置,如果一个一个设置,会比较麻烦,这时可以使用对象的处理器函数__get()和__set(),不过使用这两个方法的前提,属性需要是protect或private的,如下例:

实例代码如下:

  1.  class Person 
  2.  private $__data = array(); 
  3.  
  4.  public function __get($property
  5.  { 
  6.   if (isset($this->__data[$property])) 
  7.   { 
  8.    return $this->__data[$property]; 
  9.   } 
  10.   else 
  11.   { 
  12.    return false; 
  13.   } 
  14.  } 
  15.  
  16.  public function __set($property$value
  17.  { 
  18.   $this->__data[$property] = $value
  19.  } 
  20. }  

__set()和__get()方法是针对protect或private属性的,这样可以做到在外界不能直接访问属性,而通过public定义的__set()和__get()方法却可以轻易访问它,同事这两个方法对属性的操作通用性也比较高,也可以限制对象的属性的合法性,只有属于$__data数组中的属性,才可以进行设置,可以防止外界直接对属性进行设置.但是使用__set()和__get()也有些不足之处.第一,这两个方法只会捕捉私有或受保护的属性,即是外界没有访问权限的属性,这样php会报一个致命错误;第二,这两个方法破坏了属性的继承性.如果父对象中有一个__set()方法,而在子类中又实现了自己的__get()方法,那么对象就不会正常的运行,因为父对象的__get()方法是永远调不到的,而且要想检测重写的属性是否存在也不能得到的,因为它不会调用__get()方法.见到有人通过实现__isset()和__unset()来解决上面的问题.代码如下:

实例代码如下:

  1. public function __isset($property
  2.  if (isset($this->data[$property])) 
  3.  { 
  4.   return true; 
  5.  } 
  6.  else 
  7.  { 
  8.   return false; 
  9.  } 
  10.  
  11. public function __unset($property
  12.  if (isset($this->data[$property])) 
  13.  { 
  14.   return unset($this->data[$property]); 
  15.  } 
  16.  else 
  17.  { 
  18.   return false; 
  19.  } 
  20. }  

使用__isset()和__unset()则能保证属性是否真正存在,不过这两个方法只有在PHP5.1后才有效.

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » php中__get()和__set()用法介绍

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡