PHP の静的メソッドは非静的メソッドにアクセスできます。オブジェクトをインスタンス化すると、オブジェクト内の非静的メソッドを呼び出すことができます。静的メソッドは非静的メソッドを呼び出すことはできますが、コンストラクターを呼び出すことはできません。
この記事の動作環境: Windows 10 システム、PHP バージョン 7.1、Dell G3 コンピューター。
非静的メソッドを呼び出すとどうなりますか?まずテストを行ってください。
<?php class test{ function test() { echo 'it works'; } } 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 'it works'; } function test2() { echo 'it works too'; } } test::test2(); ?>
実行結果:
it works too
これは、非静的メソッドの静的な呼び出しは可能ですが、コンストラクターの静的な呼び出しは不可能であることを示しています。この結論を検証するために、次のテストを実行しました。
<?php class test{ static function test() { echo 'it works'; } } 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 サイトの他の関連記事を参照してください。