详解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 相关文章推荐
自动跳转中英文页面
Oct 09 PHP
php快速url重写更新版[需php 5.30以上]
Apr 25 PHP
php实现最简单的MVC框架实例教程
Sep 08 PHP
php导出CSV抽象类实例
Sep 24 PHP
php进行支付宝开发中return_url和notify_url的区别分析
Dec 22 PHP
PHP中文编码小技巧
Dec 25 PHP
php中heredoc与nowdoc介绍
Dec 25 PHP
php 读取输出其他文件的实现方法
Jul 26 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
php cookie 详解使用实例
Nov 03 PHP
PHP中单例模式与工厂模式详解
Feb 17 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 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
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
PHP可变函数的使用详解
2013/06/14 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
php判断IP地址是否在多个IP段内
2020/08/18 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
2013/09/24 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
基于Python实现天天酷跑功能
2021/01/06 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
会计专业的自荐信
2013/12/12 职场文书
公证委托书模板
2014/04/03 职场文书
运动员获奖感言
2014/08/15 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
领导欢迎词范文
2015/01/26 职场文书
2015年党员个人工作总结
2015/05/13 职场文书
民间借贷纠纷案件代理词
2015/05/26 职场文书
2016年元旦寄语
2015/08/17 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python