PHP 魔术方法之__set() __get() 方法

先看看官方文档的解释

__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)vardump(s->b) 会有致命的错误
如果没有__get 方法,执行 var_dump(s>e)noticee
总结:

  • 从一个难以访问的属性读取数据的时候 __get() 方法被调用
  • 向一个难以访问的属性赋值的时候 __set() 方法被调用
  • 难以访问包括:(1)私有属性,(2)没有初

参考网址:

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

posted @ 2017-02-18 19:44  岳麓丹枫  阅读(109)  评论(0)    收藏  举报