[英]Strange result using instance methods in PHP 5.3
想知道下面的例子是如何实际工作的,以及如何能够动态地做这样的事情。 使用call_user_func
或call_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.