详解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 相关文章推荐
利用 window_onload 实现select默认选择
Oct 09 PHP
PHP性能优化工具篇Benchmark类调试执行时间
Dec 06 PHP
PHP+MySQL修改记录的方法
Jan 21 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
PHP的Yii框架的基本使用示例
Aug 21 PHP
php获取图片信息的方法详解
Dec 10 PHP
PHP性能优化大全(php.ini)
May 20 PHP
thinkphp 手机号和用户名同时登录
Jan 20 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
Jan 24 PHP
php中通过eval实现字符串格式的计算公式
Mar 18 PHP
详解在YII2框架中使用UEditor编辑器发布文章
Nov 02 PHP
yii2 url重写并隐藏index.php方法
Dec 10 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/06/13 PHP
php 空格,换行,跳格使用说明
2009/12/18 PHP
ini_set的用法介绍
2014/01/07 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
javascript 特性检测并非浏览器检测
2010/01/15 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
提示$ is not defined错误分析及解决
2013/04/09 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
2015/10/08 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
[02:00]DAC2018主宣传片——龙征四海,剑问东方
2018/03/20 DOTA
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
python实现多张图片拼接成大图
2019/01/15 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
丝芙兰加拿大官方网站:SEPHORA加拿大
2018/11/20 全球购物
小学美术教学反思
2014/02/01 职场文书
四年级下册教学反思
2014/02/01 职场文书
学习交流会主持词
2014/04/01 职场文书
励志演讲稿200字
2014/08/21 职场文书
敬业奉献模范事迹材料
2014/12/24 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS
Redis读写分离搭建的完整步骤
2021/09/14 Redis