详解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开发框架总结收藏
Apr 24 PHP
PHP 使用pcntl和libevent 实现Timer功能
Oct 27 PHP
php的ajax简单实例
Feb 27 PHP
php 伪静态之IIS篇
Jun 02 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
Jun 30 PHP
thinkphp中空模板与空模块的用法实例
Nov 26 PHP
在SAE上搭建最新wordpress的方法
Dec 21 PHP
学习PHP session的传递方式
Jun 15 PHP
CI框架常用函数封装实例
Nov 21 PHP
PHP文件后缀不强制为.php方法
Mar 31 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 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与SQL注入攻击[三]
2007/04/17 PHP
基于php伪静态的实现详细介绍
2013/04/28 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
2012/02/27 Javascript
js sort 二维数组排序的用法小结
2014/01/24 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
jQuery插件扩展测试实例
2016/06/21 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
python读取oracle函数返回值
2016/07/18 Python
在centos7中分布式部署pyspider
2017/05/03 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
python+os根据文件名自动生成文本
2019/03/21 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
Django跨域资源共享问题(推荐)
2020/03/09 Python
python 常见的排序算法实现汇总
2020/08/21 Python
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
行政主管岗位职责
2013/11/18 职场文书
自我推荐书
2013/12/04 职场文书
物业总经理岗位职责
2014/02/28 职场文书
材料员岗位职责
2014/03/13 职场文书
服务承诺书范文
2014/05/19 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
高三物理教学反思
2016/02/20 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL