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

1 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();
Run Code Online (Sandbox Code Playgroud)

输出:

a#3
Run Code Online (Sandbox Code Playgroud)

函数static do_test()不会调用magic methods(__set).为什么?谢谢!

dec*_*eze 7

只有在属性不可访问时(包括它不存在)才会调用魔术方法.你的财产是private.Test::do_test可以访问该private属性,因为您从具有相同类的上下文访问它.它不必是相同的实例(即$thisself),它只需要是相同的类上下文.private即使类不是同一个实例,类也可以访问其属性.因此,访问不需要您的魔术方法.