详解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为php增加openssl模块的方法
Jun 14 PHP
php中使用__autoload()自动加载未定义类的实现代码
Feb 06 PHP
Java和PHP在Web开发方面对比分析
Mar 01 PHP
php生成高清缩略图实例详解
Dec 07 PHP
使用PHP如何实现高效安全的ftp服务器(二)
Dec 30 PHP
Zend Framework框架路由机制代码分析
Mar 22 PHP
实例讲解php数据访问
May 09 PHP
Yii框架组件和事件行为管理详解
May 20 PHP
PHP编程之设置apache虚拟目录
Jul 08 PHP
PHP页面输出时js设置input框的选中值
Sep 30 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
符合W3C网页标准的iframe标签的使用方法
2007/07/19 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
javascript滚轮事件基础实例讲解(37)
2017/02/14 Javascript
微信小程序之页面拦截器的示例代码
2017/09/07 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
python与字符编码问题
2019/05/24 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
计算机维护专业推荐信
2014/02/27 职场文书
年终晚会主持词
2014/03/25 职场文书
导航工程专业自荐信
2014/09/02 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
公司员工安全协议书
2014/11/21 职场文书
行政文员岗位职责
2015/02/04 职场文书
企业团队精神心得体会
2016/01/19 职场文书
晚会开幕词范文
2016/03/04 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书
读《推着妈妈去旅行》有感1500字
2019/10/15 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书
基于Python编写一个监控CPU的应用系统
2022/06/25 Python