php中__get()和__set()用法介绍_PHP教程
程序员文章站
2022-04-30 23:35:56
...
想要对对象的属性进行一些设置,如果一个一个设置,会比较麻烦,这时可以使用对象的处理器函数__get()和__set(),不过使用这两个方法的前提,属性需要是protect或private的,如下例:
代码如下 | 复制代码 |
class Person { private $__data = array(); public function __get($property) { if (isset($this->__data[$property])) { return $this->__data[$property]; } else { return false; } } public function __set($property, $value) { $this->__data[$property] = $value; } } |
__set()和__get()方法是针对protect或private属性的,这样可以做到在外界不能直接访问属性,而通过public定义的__set()和__get()方法却可以轻易访问它,同事这两个方法对属性的操作通用性也比较高,也可以限制对象的属性的合法性,只有属于$__data数组中的属性,才可以进行设置,可以防止外界直接对属性进行设置。但是使用__set()和__get()也有些不足之处。第一,这两个方法只会捕捉私有或受保护的属性,即是外界没有访问权限的属性,这样php会报一个致命错误;第二,这两个方法破坏了属性的继承性。如果父对象中有一个__set()方法,而在子类中又实现了自己的__get()方法,那么对象就不会正常的运行,因为父对象的__get()方法是永远调不到的,而且要想检测重写的属性是否存在也不能得到的,因为它不会调用__get()方法。见到有人通过实现__isset()和__unset()来解决上面的问题。代码如下:
代码如下 | 复制代码 |
public function __isset($property) { if (isset($this->data[$property])) { return true; } else { return false; } } public function __unset($property) { if (isset($this->data[$property])) { return unset($this->data[$property]); } else { return false; } } |
使用__isset()和__unset()则能保证属性是否真正存在,不过这两个方法只有在PHP5.1后才有效。
上一篇: PHP语法二:数据类型、运算符和函数
下一篇: PHP静态成员变量和非静态成员变量
推荐阅读
-
PHP中__set()实例用法和基础讲解
-
PHP fopen()和 file_get_contents()应用与差异介绍
-
php中$_REQUEST、$_POST、$_GET的区别和联系小结
-
php中ob_flush函数和flush函数用法分析
-
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
-
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
-
php中file_get_content 和curl以及fopen 效率分析
-
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
-
PHP中return 和 exit 、break和contiue 区别与用法
-
PHP中__get()和__set()的用法实例详解