首頁 > 後端開發 > PHP問題 > php中靜態方法可以存取非靜態方法嗎

php中靜態方法可以存取非靜態方法嗎

WBOY
發布: 2023-03-15 16:36:01
原創
2180 人瀏覽過

PHP中靜態方法可以存取非靜態方法,透過實例化對象,就可以呼叫對像中的非靜態方法;靜態方法雖然可以呼叫非靜態方法,但是不能夠呼叫建構方法。

php中靜態方法可以存取非靜態方法嗎

本文操作環境:Windows10系統、PHP7.1版、Dell G3電腦。

php中靜態方法可以存取非靜態方法嗎

如果我們呼叫了非靜態方法會怎麼樣呢?首先做測試。

<?php
class test{
    function test() {
        echo &#39;it works&#39;;
    }
}
test::test();
?>
登入後複製

執行以下,回傳錯誤如下:

Fatal error: Non-static method test::test() cannot be called statically in /home/×××/test.php
on line 7 Call Stack: 0.0002 332548 1. {main}() /home/×××/test.php:0
登入後複製

這個時候,可能大家就會認為靜態呼叫非靜態方法是行不通的了,但其實,結論下的過早了,因為test()這個方法比較特殊,跟類別同名,是建構方法。 我們繼續測試。

<?php
class test {
    function test() {
        echo &#39;it works&#39;;
    }
    function test2() {
        echo &#39;it works too&#39;;
    }
}
test::test2();
?>
登入後複製

執行結果:

it works too
登入後複製

這說明,靜態呼叫非靜態方法是可行的,但是靜態呼叫建構方法是不可以的。為了驗證這個結論,我又做了以下測試:

<?php
class test{
    static function test() {
        echo &#39;it works&#39;;
    }
}
test::test();
?>
登入後複製

執行的結果如下:

Fatal error: Constructor test::test() cannot be static in /home/xxx/test.php on line 9
登入後複製

建構方法不能宣告靜態,所以上面的推論正確。

但這個結果的確是很特殊的,因為可能只有PHP可以靜態呼叫非靜態方法,我用Java做了實驗,如果靜態呼叫非靜態方法會報如下錯誤:

Cannot make a static reference to the non-static method showString() from the type HelloWorldApp
登入後複製

其他語言我沒有一一嘗試,但這已經足夠來說明PHP的特殊之處,關於為什麼PHP會有這樣的情況我暫時沒有找到相關說明。

推薦學習:《PHP影片教學

以上是php中靜態方法可以存取非靜態方法嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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