[英]Can php call non static method without instantiating the class first?
我在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>
。
您必須首先實例化該類。 像這樣:
$affiliatemarketing = new AffiliateMarketing;
然后執行以下操作:
add_action('init', array(&$affiliatemarketing, 'initialize'), 1);
編輯:忘了添加,您在方法中的操作應這樣添加:
add_action('woocommerce_before_single_product', array(&$this, "handleAffiliateReferral"));
你不應該是。 這就是為什么您會遇到錯誤。
我不確切知道您如何注冊該方法(代碼會有所幫助),但是可能您希望Wordpress負責創建實例,但這不是它的作用。
我發現以為Codex記錄了如果使用類的字符串表示形式指定了類名,則add_action
函數將假定該調用是對靜態方法的調用。
另一方面,如果傳遞了類的實例,則add_action
將使用該實例進行方法調用。
盡管Arman尚未指定他使用的php版本,但我認為它可能是5.3.2或5.3.3。 錯誤本身與該問題中描述的錯誤非常相似,解決方案也將是升級到最新版本的php 5.3。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.