首頁 > 後端開發 > php教程 > 為什麼無法使用雙冒號 (::) 運算子來呼叫非靜態 PHP 方法?

為什麼無法使用雙冒號 (::) 運算子來呼叫非靜態 PHP 方法?

Linda Hamilton
發布: 2024-11-28 17:14:12
原創
325 人瀏覽過

Why Can't I Call Non-Static PHP Methods Using the Double Colon (::) Operator?

了解使用雙冒號(::) 的非靜態方法呼叫

嘗試使用下列語法呼叫非靜態方法時靜態方法(class ::method),您可能會遇到錯誤。與配置問題相反,這種行為是 PHP 設計所固有的。

在 PHP 中,非靜態方法需要先建立實例才能呼叫。發生錯誤的原因是使用 class::method 語法時,沒有明確提供實例。

靜態方法和非靜態方法的差異

靜態方法可以在不呼叫的情況下呼叫類別的實例,而非靜態方法則需要實例。這種差異在下面的範例中很明顯:

class Teste {

    public function fun1() {
        echo 'fun1';
    }
    public static function fun2() {
        echo "static fun2" ;
    }
}

Teste::fun2(); // This is valid because fun2 is a static method
Teste::fun1(); // This will generate an error because fun1 is not a static method
登入後複製

不一致的行為

但是,PHP 與靜態呼叫的非靜態方法表現出一些不一致的行為。如果從同一類別的非靜態方法中靜態呼叫非靜態方法,非靜態方法中的 $this 將引用該類別的目前實例。

class A 
{
    public function test()
    {
        echo $this->name;
    }
}

class C 
{
    public function q()
    {
        $this->name = 'hello';
        A::test();
    }
}

$c = new C;
$c->q(); // This will print 'hello'
登入後複製

此行為啟用嚴格錯誤報告後可視為錯誤。

結論

呼叫非靜態方法通常不鼓勵使用靜態方法的語法。它可能會導致意外的行為或錯誤。相反,建議使用正確的語法來呼叫非靜態方法,這涉及創建類別的實例,然後在該實例上呼叫該方法。

以上是為什麼無法使用雙冒號 (::) 運算子來呼叫非靜態 PHP 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板