详解php的魔术方法__get()和__set()使用介绍


Posted in PHP onSeptember 19, 2012

先看看php官方文档的解释:
__set() is run when writing data to inaccessible properties.
__get() is utilized for reading data from inaccessible properties.

究竟用中文怎么翻译呢?
inaccessible :n. 难达到;难接近;无法理解。

有代码有真相:

<?php 
error_reporting(E_ALL); 
class stu{ 
private $a; 
private $b = 0; 
public $c; 
public $d = 0; 
//这里的 private 可以用 protected public 替代 
private function __get($name) { 
return 123; 
} //这里的 private 也可以用 protected public 替代 
private 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方法,执行 var_dump($s->a) var_dump($s->b) 会有致命的错误
如果没有__get方法,执行 var_dump($s->e) 会有一个notice,提示没有定义属性 $e

总结:
1. 从一个难以访问的属性读取数据的时候 __get() 方法被调用
2. 向一个难以访问的属性赋值的时候 __set() 方法被调用
3. 难以访问包括:(1)私有属性,(2)没有初始化的属性
4. __isset() __unset() 也类似

PHP 相关文章推荐
PHP数据类型之布尔型的介绍
Apr 28 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
Jul 05 PHP
php读取图片内容并输出到浏览器的实现代码
Aug 08 PHP
php数据类型判断函数有哪些
Sep 23 PHP
php教程之phpize使用方法
Feb 12 PHP
php实现保存submit内容之后禁止刷新
Mar 19 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
Jul 25 PHP
浅析PHP程序设计中的MVC编程思想
Jul 28 PHP
PHP中array_slice函数用法实例详解
Nov 25 PHP
php删除数组中重复元素的方法
Dec 22 PHP
Linux下编译redis和phpredis的方法
Apr 07 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
php引用计数器进行垃圾收集机制介绍
Sep 19 #PHP
mysql,mysqli,PDO的各自不同介绍
Sep 19 #PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 #PHP
PHP输入流php://input介绍
Sep 18 #PHP
PHP爆绝对路径方法收集整理
Sep 17 #PHP
php中inlcude()性能对比详解
Sep 16 #PHP
微博短链接算法php版本实现代码
Sep 15 #PHP
You might like
在字符串中把网址改成超级链接
2006/10/09 PHP
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
PHP开发过程中常用函数收藏
2009/12/14 PHP
php 批量替换html标签的实例代码
2013/11/26 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
PHPMailer发送邮件
2016/12/28 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
php的扩展写法总结
2019/05/14 PHP
PHP连接MySQL数据库操作代码实例解析
2020/07/11 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
JS实现在线ps功能详解
2019/07/31 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
编程语言Python的发展史
2014/09/26 Python
python开发之str.format()用法实例分析
2016/02/22 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
pandas求两个表格不相交的集合方法
2018/12/08 Python
Python数据类型之Tuple元组实例详解
2019/05/08 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
python编写计算器功能
2019/10/25 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
新书吧创业计划书
2014/01/31 职场文书
乡镇纠风工作实施方案
2014/03/22 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
捐款仪式主持词
2015/07/04 职场文书
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python
sql查询语句之平均分、最高最低分及排序语句
2022/05/30 MySQL