繁体   English   中英

使用PHP 5.3中的实例方法的奇怪结果

[英]Strange result using instance methods in PHP 5.3

想知道下面的例子是如何实际工作的,以及如何能够动态地做这样的事情。 使用call_user_funccall_user_func_array不允许这种情况发生。

<?php
class Person
{
    public $name = "George";

    public function say_hi()
    {
            return ExtraMethods::hi();
    }
}

class ExtraMethods
{
    public function hi()
    {
            return "Hi, ".$this->name;
    }
}

$george = new Person();
echo $george->say_hi();
?>

这应该导致:

Hi, George

想知道为什么实例方法hi不仅可以静态调用(不会感到惊讶,这可能发生在PHP中),但为什么我能够使用$this

手册

当从对象上下文中调用方法时,伪变量$ this可用。 $ this是对调用对象的引用(通常是方法所属的对象,但如果从辅助对象的上下文中静态调用该方法,则可能是另一个对象)。

所以,根据第二部分,按设计。 请记住它虽然使用了实际的对象实例(换句话说,如果你添加public $name = "SomethingElse";对于ExtraMethods ,结果仍然是Hi, George )。

静态调用该方法不是正确的编码,但PHP会原谅您,并且只发出严格错误:

"Strict Standards: Non-static method ExtraMethods::hi() should not be called statically, assuming $this from incompatible context in ..."

当然,在这种情况下,只是将对象作为参数传递将更加清晰和可取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM