详解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 相关文章推荐
PHP5/ZendEngine2的改进
Oct 09 PHP
PHP函数utf8转gb2312编码
Dec 21 PHP
实现dedecms全站URL静态化改造的代码
Mar 29 PHP
php str_pad 函数用法简介
Jul 11 PHP
利用php下载xls文件(自己动手写的)
Apr 18 PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 PHP
服务器上配置PHP运行环境教程
Feb 12 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
php好代码风格的阶段性总结
Jun 25 PHP
php集成动态口令认证
Jul 21 PHP
PHP去除字符串最后一个字符的三种方法实例
Mar 01 PHP
PHP数据对象映射模式实例分析
Mar 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
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
用PHP+java实现自动新闻滚动窗口
2006/10/09 PHP
php实现的ping端口函数实例
2014/11/12 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
php导出生成word的方法
2015/12/25 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
node.js中的console用法总结
2014/12/15 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
使用AngularJS 应用访问 Android 手机的图片库
2015/03/24 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
浅谈JavaScript的闭包函数
2016/12/08 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
详解Vue中过度动画效果应用
2017/05/25 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
Javascript的this详解
2019/03/23 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
Python基于DES算法加密解密实例
2015/06/03 Python
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
Django继承自带user表并重写的例子
2019/11/18 Python
生产副总岗位职责
2013/11/28 职场文书
表决心的诗句大全
2014/03/11 职场文书
幼教求职信
2014/03/12 职场文书
大队委竞选演讲稿
2014/04/28 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
2015年幼儿园德育工作总结
2015/05/25 职场文书
解决golang post文件时Content-Type出现的问题
2021/05/02 Golang
PyQt5实现多张图片显示并滚动
2021/06/11 Python