详解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 相关文章推荐
PHP4实际应用经验篇(2)
Oct 09 PHP
php error_log 函数的使用
Apr 13 PHP
PHP高级OOP技术演示
Aug 27 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
Jun 04 PHP
Yii PHP Framework实用入门教程(详细介绍)
Jun 18 PHP
PHP防盗链代码实例
Aug 27 PHP
PHP产生不重复随机数的5个方法总结
Nov 12 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
PHP计算指定日期所在周的开始和结束日期的方法
Mar 24 PHP
PHP动态柱状图实现方法
Mar 30 PHP
smarty模板判断数组为空的方法
Jun 10 PHP
PHP __call()方法实现委托示例
May 20 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
PHP的单引号和双引号 字符串效率
2009/05/27 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
php实现图片缩略图的方法
2016/03/29 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
jQuery UI Dialog 创建友好的弹出对话框实现代码
2012/04/12 Javascript
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
ExtJS4中的requires使用方法示例介绍
2013/12/03 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
jquery实现图片预加载
2015/12/25 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
详解用node编写自己的cli工具
2017/05/23 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
Python 自动化表单提交实例代码
2017/06/08 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
什么是python的函数体
2020/06/19 Python
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
生物化学研究助理员求职信
2013/10/09 职场文书
小学生清明节演讲稿
2014/09/05 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
OpenCV实现常见的四种图像几何变换
2022/04/01 Python
python双向链表实例详解
2022/05/25 Python
Android RecyclerView实现九宫格效果
2022/06/28 Java/Android