首页 > Web开发 > 详细

详解php的魔术方法__get()和__set()

时间:2015-01-11 06:10:29      阅读:335      评论:0      收藏:0      [点我收藏+]

先看看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() 也类似

(转自http://www.cnblogs.com/glory-jzx/archive/2012/05/23/2514173.html

详解php的魔术方法__get()和__set()

原文:http://www.cnblogs.com/perseverancevictory/p/4216068.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!