簡體   English   中英

PHP:從父級調用靜態方法時出現“調用未定義的方法”錯誤

[英]PHP: “Call to undefined method” error when calling static method from parent

如果兩者都是靜態的,那么從父類調用子類方法的正確方法是什么?

當我使用靜態類時,它返回錯誤“ 調用未定義的方法A :: multi() ”,但是當我使用非靜態方法時沒有問題,例如:

//-------------- STATIC ------------------
class A {
    public static function calc($a,$b) {
        return self::multi($a, $b);
    }
}
class B extends A {
    public static function multi($a, $b) {
        return $a*$b;
    }
}
echo B::calc(3,4); //ERROR!!

//-------------- NON-STATIC ----------------
class C {
    public function calc($a,$b) {
        return $this->multi($a, $b);
    }
}
class D extends C {
    public function multi($a, $b) {
        return $a*$b;
    }
}
$D = new D();
echo $D->calc(3,4); // Returns: 12

有沒有辦法在不知道其類名的情況下調用子靜態方法?

它只能在PHP 5.3及更新版本中使用, 后期靜態綁定 ,其中PHP 5.3能夠訪問子類中的靜態成員,而不是self引用的類,因為它在運行時而不是編譯時解析。

不幸的是,我不認為在PHP 5.2及更早版本中有這個解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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