【发布时间】:2012-02-01 12:24:21
【问题描述】:
我在我的 Wordpress 插件中为操作注册了类方法。当我的方法被 Wordpress 调用时,如果我尝试使用 $this 变量,php 会抛出一个错误,指出对 $this 变量的调用在对象上下文之外是非法的。
怎么可能?我认为除非该方法是静态的,否则如果未实例化该类,则不应调用类方法!我的方法不是静态的!发生了什么?
源代码
显然初始化是从主插件文件中调用的:
add_action('init', array('AffiliateMarketting', 'initialize'), 1);
我的班级是这样的:
class AffiliateMarketting
{
public function __construct()
{
// some initialization code
}
public function initialize()
{
add_action('woocommerce_before_single_product', array("AffiliateMarketting", "handleAffiliateReferral"));
}
public function handleAffiliateReferral($post)
{
$this->xxx(); // <---- offending function call
}
public function xxx()
{
}
}
收到的错误信息实际上是Fatal error: Using $this when not in object context in <filename> on line <linenumber>。
【问题讨论】:
-
你使用的是什么版本的 PHP?
-
错误信息是
Fatal error: Using $this when not in object context in <filename> on line <linenumber>?那么上的代码不在类方法中。向我们展示有问题的代码。 -
@VolkerK 我用一些代码更新了问题
-
hm,那么 Arjan 就更有趣了。当我对非静态方法进行静态调用时,php 会引发更具体的错误消息:“PHP 严格标准:不应静态调用非静态方法 Foo::bar()”。