


私の考えは混乱しています。静的でないメソッドも静的に呼び出すことができることがわかりました (転送) 私の考えは static_PHP チュートリアルです。
私の考えは、静的ではないメソッドも静的に呼び出すことができることがわかりました
1. PHPでは、静的ではないメソッドを静的に呼び出すことができますか?
今日、PHP で className::methodName() メソッドを使用して、Static として宣言されていないメソッドを呼び出すことができるかどうか尋ねられました。私の心の中では、この用法を以前に見たような気がしますが、少し自信がありません。ご存知のとおり、マニュアルやチュートリアルでは、メソッドは静的メソッドと非静的メソッドに分けられます。通常、静的に呼び出すメソッドは静的メソッドでなければなりません。
非静的メソッドを呼び出すとどうなるでしょうか?まずテストを行ってください。
クラステスト{<br>
関数テスト(){<br>
エコー「うまくいきます」;<br>
}<br>
}<br>
テスト::テスト();<br>
以下を実行すると、返されるエラーは次のとおりです
致命的なエラー:
非静的メソッド test::test() を静的に呼び出すことはできません
/home/×××/test.php
7 行目 呼び出しスタック: 0.0002 332548 1. {main}()
/home/×××/test.php:0<br>
現時点では、非静的メソッドを静的に呼び出すことは不可能だと誰もが考えるかもしれませんが、実際には、test() メソッドは非常に特殊であり、クラスと同じ名前を持ち、コンストラクターメソッド。
テストを続けます。
クラステスト{<br>
関数テスト(){<br>
エコー「うまくいきます」;<br>
}<br>
関数 test2(){<br>
echo 'それも機能します';<br>
}<br>
}<br>
テスト::テスト2();<br>
実行結果:
それも効きますit works too
これは、非静的メソッドの静的な呼び出しは可能ですが、コンストラクターの静的な呼び出しはできないことを示しています。この結論を検証するために、次のテストを実行しました:
<?php<br>
クラステスト{<br>
静的関数 test(){<br>
エコー「うまくいきます」;<br>
}<br>
}<br>
テスト::テスト();
実行結果は以下の通りです:
致命的なエラー: コンストラクター test::test() を静的にすることはできません
/home/xxx/test.php 9行目
コンストラクターは静的に宣言できないため、上記の推論は正しいです。
しかし、この結果は確かに非常に特殊です。おそらく 非静的メソッドを静的に呼び出すことができるのは PHP だけです。非静的メソッドを静的に呼び出すと、次のエラーが報告されます。
非静的メソッドへの静的参照を作成することはできません
HelloWorldApp 型からの showString()
他の言語を 1 つずつ試したわけではありませんが、PHP の特殊な機能を説明するにはこれで十分です。なぜ PHP がそのような状況になるのかについての適切な説明は見つかりませんでした。
2. 非静的メソッドへの静的呼び出しを適用する必要がありますか?
それでは、静的メソッドの代わりにこのメソッドを使用できますか? まず、コードの可読性の観点から、非静的メソッドを静的に呼び出すことは当然推奨されません。これはメンテナーを混乱させることになります。
次に、非静的メソッドを静的に呼び出すことに効率性の点で利点があるかどうかを確認するために、いくつかの実験を行ってみましょう。
クラステスト{関数test2(){}}<br>
for($k=0; $k
{<br>
テスト::テスト2();<br>
}<br>
ここで上記のコードの実行時間は 18 ~ 28 ミリ秒です。標準的な書き込み方法をテストしてみましょう。
クラステスト{静的関数test2(){}}<br>
for($k=0; $k
{<br>
テスト::テスト2();<br>
}<br>
上記のコードの実行時間は 5 ~ 10 ミリ秒です。この観点から、非静的メソッドの静的呼び出しの効率は標準の静的メソッド呼び出しよりもはるかに低いため、非静的メソッドの静的呼び出しは推奨されません。効率性の向上。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。
