详解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中使用Oracle数据库(3)
Oct 09 PHP
php小型企业库存管理系统的设计与实现代码
May 16 PHP
PHP APC缓存配置、使用详解
Mar 06 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
PHP获取数组中重复最多的元素的实现方法
Nov 11 PHP
浅析php单例模式
Nov 25 PHP
Laravel 5 学习笔记
Mar 06 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
Mar 25 PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 PHP
php编译安装php-amq扩展简明教程
Jun 25 PHP
PHP静态成员变量和非静态成员变量详解
Feb 14 PHP
php支付宝APP支付功能
Jul 29 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
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
2017/01/23 Javascript
理解javascript async的用法
2017/08/22 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
js实现双色球效果
2020/08/02 Javascript
js实现随机点名
2021/01/19 Javascript
wxPython窗口的继承机制实例分析
2014/09/28 Python
Python生成随机数组的方法小结
2017/04/15 Python
Sanic框架Cookies操作示例
2018/07/17 Python
对numpy下的轴交换transpose和swapaxes的示例解读
2019/06/26 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
PHP如何自定义函数
2016/09/16 面试题
组织关系转移介绍信
2014/01/16 职场文书
给老婆的婚前保证书
2014/02/01 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
航空学院求职信
2014/06/11 职场文书
公司证明怎么写
2014/09/22 职场文书
2016年社区创先争优活动总结
2016/04/05 职场文书