详解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实现与ASP Banner组件相似的类
Oct 09 PHP
php字符串截取问题
Nov 28 PHP
从MySQL数据库表中取出随机数据的代码
Sep 05 PHP
供参考的 php 学习提高路线分享
Oct 23 PHP
php中serialize序列化与json性能测试的示例分析
Apr 27 PHP
php采用curl实现伪造IP来源的方法
Nov 21 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
Jan 26 PHP
php递归创建目录的方法
Feb 02 PHP
php实现修改新闻时删除图片的方法
May 12 PHP
php格式化json函数示例代码
May 12 PHP
php微信公众账号开发之前五个坑(一)
Sep 18 PHP
Laravel框架表单验证操作实例分析
Sep 30 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
php全角字符转换为半角函数
2014/02/07 PHP
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
php实现URL加密解密的方法
2016/11/17 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
jquery tools之tooltip
2009/07/25 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
Json解析的方法小结
2016/06/22 Javascript
Centos7 中 Node.js安装简单方法
2016/11/02 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
jQuery实现对象转为url参数的方法
2017/01/11 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
vue-cli webpack 开发环境跨域详解
2017/05/18 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
关于python的list相关知识(推荐)
2017/08/30 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
英国打印机墨盒销售网站:Ink Factory
2019/10/07 全球购物
SCHIESSER荷兰官方网站:德国内衣专家
2020/10/09 全球购物
Java模拟试题
2014/11/10 面试题
中英文自我评价语句
2013/12/20 职场文书
部队万能检讨书
2014/02/20 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
解读MySQL的客户端和服务端协议
2021/05/10 MySQL