PHP和魔术方法进入自己的类

时间:2018-09-11 08:08:33

标签: php

我的代码:

class Test {

    private $a = 5;

    public function __set($name, $value)
    {
        // TODO: Implement __set() method.
        echo $name . "#" .$value."<br>";
    }

    public static function do_test(){
        $x= new Test();
        $x->a=5;
    }


}
$x=new Test();
$x->a=3;
Test::do_test();

输出:

a#3

静态do_test()函数不会调用魔术方法(__set)。为什么? 谢谢!

1 个答案:

答案 0 :(得分:7)

仅当属性不可访问(包括不存在的属性)时才调用魔术方法。您的财产是privateTest::do_test可以访问该private属性,因为您是从具有相同类的上下文中访问它的。它不必是相同的 instance (即$thisself),而只需是相同的 class上下文。即使类与 instance 不同,也可以访问其private属性。因此,该访问不需要您的魔术方法。