php没有在静态函数内重载

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php没有在静态函数内重载脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我似乎不明白为什么下面的代码只打印“test”两次.

<?PHP

class A {
    PRivate $test = "TEST<br />";

    public static function getInstance() {
        return new self();
    }

    public static function someStaticMethod() {
        $a = new self();
        $a->test;
    }

    public function __get($args) {
        echo $this->$args;
    }
}

/* echo's "TEST" */
$a = new A();
$a->test;

/* echo's "TEST" */
$a2 = A::getInstance();
$a2->test;

/*
No output... eeerhm... how come?
Why is $a->test (inside someStaticMethod()) not being overloaded by __get ??
*/
A::someStaticMethod();

?>

PHP网站说(link):

但我认为他们试图说你应该宣布魔方法是静态的.例如.:

public static function __get(){}

事实上,我实际上是在对象上下文中使用它. $a = new self();返回变量$a中A类的实例.然后我使用$a-> test(对象上下文imo?)来获取私有的“test”变量,而该变量又应该被重载…

我很迷惑…

@L_406_9@

看来,在A :: someStaticMethod的上下文中,PHP允许您直接访问私有变量$test,因此魔术方法不会执行.如果你回复$a-> test;从那里,你会看到它被访问.

根据PHP Manual,这是预期的行为:

脚本宝典总结

以上是脚本宝典为你收集整理的php没有在静态函数内重载全部内容,希望文章能够帮你解决php没有在静态函数内重载所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。