php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
一般来说,总是把类的属性定义为private,这更符合现实的逻辑。但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5 中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性,以及检查属性的“__isset()”和删除属性的方法“__unset()”。 在PHP面向对象编程中,`__get()`, `__set()`, `__isset()`, 和 `__unset()` 是四个非常重要的魔术方法,它们允许开发者在访问不存在或者不可见的类属性时提供一种处理机制。这些方法是PHP5引入的特性,主要用于增强对象属性的封装性和动态性。 1. **__get()** 方法: 当尝试访问一个私有或受保护的属性时,如果该属性未被定义或不可见,PHP会自动调用`__get()`方法。此方法接受一个参数,即尝试访问的属性名称。`__get()`可以返回该属性的值,如果属性存在,或者返回`NULL`,如果属性不存在。在实际应用中,`__get()`可用于实现属性的懒加载或者数据验证等操作。 ```php class MyClass { private $myProperty; private function __get($property_name) { if (isset($this->$property_name)) { return $this->$property_name; } else { return NULL; } } } ``` 2. **__set()** 方法: 类似地,当尝试为私有或受保护的属性赋值,且该属性未定义或不可见时,`__set()`会被调用。它接收两个参数,一个是属性名,另一个是要赋的值。这个方法可以用于在赋值前进行类型检查、值的转换或者记录日志等操作。 ```php class MyClass { private $myProperty; private function __set($property_name, $value) { echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私"; $this->$property_name = $value; } } ``` 3. **__isset()** 方法: 这个方法用于检查私有或受保护的属性是否已被设置且非`NULL`。当使用`isset()`函数检查一个私有或不可见属性时,PHP会调用`__isset()`。返回值是布尔型,表示属性是否存在且非`NULL`。 ```php class MyClass { private $myProperty; private function __isset($property_name) { return isset($this->$property_name); } } ``` 4. **__unset()** 方法: 当使用`unset()`函数尝试删除私有或受保护的属性时,PHP会调用`__unset()`方法。这个方法可以用来执行清理操作,如释放资源,但实际删除属性的工作通常不建议在这里进行,因为这可能导致数据丢失。 ```php class MyClass { private $myProperty; private function __unset($property_name) { unset($this->$property_name); } } ``` 通过使用这些魔术方法,开发人员可以在类中创建更灵活的数据模型,同时保持良好的封装性。例如,可以利用`__get()`和`__set()`实现属性的动态创建和访问,而`__isset()`和`__unset()`则可以在检查或删除属性时提供额外的控制和逻辑。这些方法使得对象的属性管理更加灵活,适应各种复杂场景,是PHP面向对象编程中的重要工具。
- 粉丝: 3
- 资源: 934
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 各种字符串相似度和距离算法的实现Levenshtein、Jaro-winkler、n-Gram、Q-Gram、Jaccard index、最长公共子序列编辑距离、余弦相似度…….zip
- 运用python生成的跳跃的爱心
- 包括用 Java 编写的程序 欢迎您在此做出贡献!.zip
- (源码)基于QT框架的学生管理系统.zip
- 功能齐全的 Java Socket.IO 客户端库,兼容 Socket.IO v1.0 及更高版本 .zip
- 功能性 javascript 研讨会 无需任何库(即无需下划线),只需 ES5 .zip
- 分享Java相关的东西 - Java安全漫谈笔记相关内容.zip
- 具有适合 Java 应用程序的顺序定义的 Cloud Native Buildpack.zip
- 网络建设运维资料库职业
- 关于 Java 的一切.zip