首页 > 解决方案 > 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

函数 staticdo_test()不调用魔术方法 ( __set)。为什么?谢谢!

标签: php

解决方案


魔术方法仅在属性不可访问时调用(包括如果它不存在)。你的财产是privateTest::do_test可以访问该private属性,因为您正在从具有相同类的上下文中访问它。它不必是同一个实例(即$thisor self),它只需要是同一个类 context。一个类可以访问它的private属性,即使它不是同一个实例。因此,该访问不需要您的魔术方法。


推荐阅读