ホームページ >バックエンド開発 >PHPの問題 >PHPの静的メソッドは非静的メソッドにアクセスできますか?

PHPの静的メソッドは非静的メソッドにアクセスできますか?

WBOY
WBOYオリジナル
2022-03-22 16:54:402184ブラウズ

PHP の静的メソッドは非静的メソッドにアクセスできます。オブジェクトをインスタンス化すると、オブジェクト内の非静的メソッドを呼び出すことができます。静的メソッドは非静的メソッドを呼び出すことはできますが、コンストラクターを呼び出すことはできません。

PHPの静的メソッドは非静的メソッドにアクセスできますか?

この記事の動作環境: Windows 10 システム、PHP バージョン 7.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

他の言語を 1 つずつ試したわけではありませんが、PHP の特殊な機能を説明するにはこれで十分です。なぜ PHP にそのような機能があるのか​​については、関連する説明が見つかりませんでした。状況。

推奨学習: 「

PHP ビデオ チュートリアル

以上がPHPの静的メソッドは非静的メソッドにアクセスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。