この記事の内容は、PHP が静的メソッドを使用する理由 (コード例) を紹介するものであり、一定の参考価値があります。必要な友人が参照することができます。お役に立てれば幸いです。
静的メソッドは、クラスをインスタンス化せずに直接使用できます。
静的メソッドはインスタンス化よりも効率的です。静的メソッドの欠点は、インスタンス化されたメソッドは破棄される可能性があるのに対し、自動的に破棄されないことです。
静的メソッドと静的変数は作成後に常に同じメモリを使用しますが、インスタンスを使用すると複数のメモリが作成されます。
静的グローバル変数と通常のグローバル変数、静的ローカル変数と通常のローカル変数、静的関数と通常の関数の違いは何ですか?次の記事で一つずつ答えていきます。
(1) グローバル変数(外部変数)の記述の前に static が付いている場合、それは静的グローバル変数になります。グローバル変数自体は静的格納メソッドであり、静的グローバル変数も当然静的格納メソッドです。どちらも保存方法に違いはありません。両者の違いは、非静的グローバル変数の有効範囲はソースプログラム全体であり、ソースプログラムが複数のソースファイルで構成されている場合、非静的グローバル変数は各ソースファイル内で有効となります。静的グローバル変数はスコープを制限します。つまり、変数が定義されているソース ファイル内でのみ有効であり、同じソース プログラム内の他のソース ファイルでは使用できません。静的グローバル変数のスコープは 1 つのソース ファイルに限定され、そのソース ファイル内の関数でのみ共有できるため、他のソース ファイルでのエラーを回避できます。
(2) 上記の分析から、ローカル変数を静的変数に変更すると、その格納方法が変更され、その有効期間が変更されることがわかります。グローバル変数を静的変数に変更すると、そのスコープが変更され、その使用範囲が制限されます。
(3) static関数のスコープは、このファイル内のみ通常の関数と異なります。現在のソースファイル内でのみ使用される関数は内部関数(static)として宣言し、内部関数を現在のソースファイル内に記述して定義する必要があります。現在のソースファイル外で使用できる関数はヘッダファイルに記述し、その関数を使用するソースファイルにはこのヘッダファイルをインクルードする必要があります。
クラス メソッドを静的として定義できる場合は、それを静的に定義してみると、速度が 4 倍近く向上します。
コード実行の効率をテストするための唯一の基準は実践であるため、仕事から帰宅した時間を利用して、小さなテストを行いました。
最初にテスト コードをアップロードします (何か間違っている場合はお知らせください 訂正):
テスト環境:
/test # php -v PHP 5.4.24 (cli) (built: Jan 19 2014 21:32:15) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
/test # uname -a Darwin 192.168.0.101 13.1.0 Darwin Kernel Version 13.1.0: Thu Jan 16 19:40:37 PST 2014; root:xnu-2422.90.20~2/RELEASE_X86_64 x86_64
<?php class staticTest { public function test() { $i = 0; $i++; }
public static function testStatic() { $i = 0; $i++; } } $start = microtime(true); for($i=0;$i<10000000;$i++) { $test = new staticTest(); $test->test(); } echo (microtime(true) - $start) ."\n"; $start = microtime(true); for($i=0;$i<10000000;$i++) { staticTest::testStatic(); } echo microtime(true) - $start;
1000万回のループ実行の実行結果は以下の通りです:
#/test #php staticTest.php
2.29383420944211.1871800422668
2 回目の実行結果:
##多数の実行 この後、2.3 と 1.18 あたりが続いています。記事で言及されている効率の向上はそれほどひどいものではありませんが、パフォーマンスの向上は確かに約 2 倍になっていることがわかります。
したがって、引き続きお勧めします:
クラス メソッドを静的として定義できる場合は、それを静的として定義してみてください。その速度はほぼ 2 倍になります。
通常の PHP フレームワークでは、まだ多くのクラスやメソッドが存在しますが、静的メソッドを作成できる場合は、静的メソッドを使用した方が効率的です。
関連する推奨事項:
PHP クラスでの静的メソッドと静的変数の使用の概要PHP の概要静的変数の使用_PHP チュートリアル以上がPHPが静的メソッドを使用する理由の紹介(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。