详解php的魔术方法__get()和__set()使用介绍
需积分: 0 148 浏览量
更新于2020-10-27
收藏 31KB PDF 举报
在PHP中,魔术方法是特殊的方法,它们在特定的情况下自动被调用,为开发者提供了额外的控制和灵活性。本文将详细介绍两个重要的魔术方法:`__get()`和`__set()`,以及它们在处理不可访问属性时的角色。
让我们看下PHP官方文档对这两个方法的解释:
`__set()`是在尝试向不可访问的属性写入数据时被调用的。
`__get()`则是在尝试从不可访问的属性读取数据时发挥作用。
"不可访问"在这里指的是私有(`private`)或保护(`protected`)属性,以及那些尚未初始化的属性。这些属性在常规情况下不能直接通过对象实例进行访问。
下面是一个示例代码:
```php
class stu {
private $a;
private $b = 0;
public $c;
public $d = 0;
public function __get($name) {
return 123;
}
public function __set($name, $value) {
echo "This is set function";
}
}
$s = new stu();
var_dump($s->a); //output: 123
var_dump($s->b); //output: 123
var_dump($s->c); //output: null
var_dump($s->d); //output: 0
var_dump($s->e); //output: 123
$s->a = 3; //output: This is set function
$s->c = 3; //no output
$s->f = 3; //output: This is set function
```
这个例子展示了`__get()`和`__set()`的实际应用。如果没有`__get()`方法,尝试访问私有属性如 `$s->a` 和 `$s->b`,或者未声明的属性如 `$s->e`,会引发致命错误或Notice。但是,由于我们定义了`__get()`,它返回了一个默认值123,避免了错误的发生。对于未初始化的属性,`__get()`同样能提供一个默认值。
`__set()`方法在尝试向私有属性(如 `$s->a`)赋值时会被调用,因为它不能直接通过对象实例修改。然而,对于公共属性(如 `$s->c`),我们不需要`__set()`,可以直接赋值。当试图给未声明的属性(如 `$s->f`)赋值时,`__set()`也会被调用,这样就可以处理未知属性的写操作。
总结一下`__get()`和`__set()`的主要特性:
1. 当尝试从私有或保护属性,以及未初始化的属性读取数据时,`__get()`方法会被调用,为不可访问的属性提供默认值或返回期望的数据。
2. 当尝试向私有或保护属性,以及未初始化的属性写入数据时,`__set()`方法会被调用,允许我们自定义数据写入的逻辑,如日志记录、验证或其他处理。
3. "难以访问"的属性包括私有属性和未初始化的属性。公共属性不受`__get()`和`__set()`的影响。
4. `__isset()`和`__unset()`与`__get()`和`__set()`类似,分别在检查不可访问属性是否已设置(存在)和删除不可访问属性时被调用。
通过使用`__get()`和`__set()`,开发者可以在不直接暴露属性细节的情况下,为类提供更加灵活的数据访问机制,实现更强大的封装和数据处理功能。这在设计模式如代理模式、装饰器模式中尤为常见。理解并熟练运用这些魔术方法,能帮助开发者更好地掌控PHP面向对象编程的复杂性。
weixin_38646645
- 粉丝: 4
- 资源: 1001
最新资源
- 基于LSTM的淘宝商品评论分析系统详细文档+全部资料+优秀项目.zip
- 基于MKR模型的图书推荐系统 torch+flask+mysql——NLP详细文档+全部资料+优秀项目.zip
- 基于NLP的微博舆情分析系统详细文档+全部资料+优秀项目.zip
- 基于nlp的医疗问答系统详细文档+全部资料+优秀项目.zip
- 基于NLP和KNN的任务推荐系统详细文档+全部资料+优秀项目.zip
- 基于检索的问答系统详细文档+全部资料+优秀项目.zip
- 基于开放域事件提取的社会心态交互式挖掘与引导系统详细文档+全部资料+优秀项目.zip
- 基于篇章结构自动作文评分系统详细文档+全部资料+优秀项目.zip
- 基于实现一个舆情监控系统,具体基于对知乎热榜话题的数据抓取、分析与可视化。详细文档+全部资料+优秀项目.zip
- 基于文档的问答系统详细文档+全部资料+优秀项目.zip
- 基于医药知识图谱的智能问答系统详细文档+全部资料+优秀项目.zip
- 基于一个NLP旅游景点问答系统,基于BM25,Fuzzy算法实现详细文档+全部资料+优秀项目.zip
- 基于自然语言处理的智能医疗诊断系统详细文档+全部资料+优秀项目.zip
- 餐具包装纸袋包装机(sw12可编辑+CAD+说明书)全套技术开发资料100%好用.zip
- 岚精灵扫码挪车系统(移动端)(用户端-管理端)
- QWG(RZ)22-2004 高强度焊接结构用热连轧钢板和钢带.pdf