详解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 高手之路(二)
Oct 09 PHP
php下实现在指定目录搜索指定类型文件的函数
Oct 03 PHP
php 将字符串按大写字母分隔成字符串数组
Apr 30 PHP
php中使用Imagick实现图像直方图的实现代码
Aug 30 PHP
php 文本文件的读取效率
Feb 10 PHP
php中使用cookie来保存用户登录信息的实现代码
Mar 08 PHP
解析百度搜索结果link?url=参数分析 (全)
Oct 09 PHP
谈谈关于php的优点与缺点
Apr 11 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
May 26 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
Oct 25 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数组操作
2011/12/30 PHP
javascript 函数调用的对象和方法
2010/07/01 Javascript
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
[20:30]职业巡回赛回顾
2018/08/09 DOTA
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python中标准模块importlib详解
2017/04/16 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
基于python实现判断字符串是否数字算法
2020/07/10 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
css3 矩阵的使用详解
2018/03/20 HTML / CSS
化学工程专业求职信
2014/08/10 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
生日寿星公答谢词
2015/09/29 职场文书
纪律委员竞选稿
2015/11/19 职场文书
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL