簡體   English   中英

php可以在不首先實例化類的情況下調用非靜態方法嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM