详解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写的MySQL数据库用户认证系统代码
Mar 22 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
PHP中file_exists与is_file,is_dir的区别介绍
Sep 12 PHP
PHP静态调用非静态方法的应用分析
May 02 PHP
PHP $_FILES中error返回值详解
Jan 30 PHP
destoon实现公司新闻详细页添加评论功能的方法
Jul 15 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
Nov 20 PHP
php使用iconv中文截断问题的解决方法
Feb 11 PHP
一个PHP实现的轻量级简单爬虫
Jul 08 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
Oct 29 PHP
聊聊 PHP 8 新特性 Attributes
Aug 19 PHP
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
Apr 01 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
php 攻击方法之谈php+mysql注射语句构造
2009/10/30 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
2011/11/10 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
Node.js复制文件的方法示例
2016/12/29 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
vue组件系列之TagsInput详解
2020/05/14 Javascript
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
中国跨境电商:Tomtop
2017/03/16 全球购物
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
大学生职业生涯规划范文
2014/01/08 职场文书
幼儿园家长评语
2014/02/10 职场文书
网络工程师职业规划
2014/02/10 职场文书
中学生运动会入场词
2014/02/12 职场文书
中学生演讲稿
2014/04/26 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
感谢信的格式
2015/01/21 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
2015年幼儿园师德师风建设工作总结
2015/10/23 职场文书
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android