PHP5 以降、オブジェクト指向の公式サポートが大幅に強化されました。重要な変更があります。__autoload() 関数が導入されました。今後は、大量の require や include を記述する必要がなくなりました。 PHP スクリプトのヘッダーを使用する PHP 関数のマニュアルには、「まだ定義されていないクラスを使用しようとすると自動的に呼び出されます」と記載されています。
この仕組みにより、アーキテクチャの初期段階でディレクトリ構造と命名規則を考慮しておけば、開発プロセスで使用するクラスに対応するファイルを要求する必要がなくなり、開発者の負担が大幅に軽減されます。コードを削減し、多くのコードを削減します。
しかし、この方法では、プログラムを実行するのが簡単で、特定のクラスファイルが複数回インクルードされます。たとえば、次の 4 つのスクリプトがあります。
#file:include1.php include 'include2.php'; //@todo something
#file:include2.php //@todo something
#file:script1.php include 'include2.php'; //@todo something
#file:script2.php include 'include1.php'; include 'script1.php' //@todo somethingscript1.php が実行されると、
include 'include2.php'; このコード行は 1 回実行されます。 script2.php を実行すると、このコード行が 2 回実行されます。
これは単なる例です。実際のプロジェクトでは、include2.php がさらに複数回インクルードされる場合があります。このようなインクルードの繰り返しはパフォーマンスに影響しますか?これをテストするスクリプトを書きました。
#file:SimpleClass.php class SimpleClass { public function __construct() { echo get_time() . "\r\n"; } }
#file:php_include.php for($i = 0;$i < $loop;$i++) { include_once "SimpleClass.php"; new SimpleClass(); }$loop 値が 1 の場合、スクリプトには約 0.00018906593322754 秒かかります。$loop が 1000 の場合、スクリプトには約 0.076701879501343 秒かかります。
自動ロードを使用して実装したらどうなるでしょうか?
#file:php_autoload.php function __autoload($class_name) { include_once $class_name . '.php'; } for($i = 0;$i < $loop;$i++) { new SimpleClass(); }このコードでは __autoload 関数を定義しましたが、$loop が 1 の場合は 0.0002131462097168 秒かかり、$loop が 1000 の場合は前のコードの 1/ だけかかります。 0.012391805648804秒。
しかし、文字列の行を出力する SimpleClass のコードに注目してください。この出力行を削除して比較すると、結果はどうなるでしょうか。
$loop が両方とも 1000 の場合、前者は 0.057836055755615 秒かかりますが、autoload を使用すると、0.00199294090271 秒しかかかりません。効率の差は約30倍!
上記のテストからわかるように、ファイルが 1 回だけインクルードされる場合、自動ロードには少し時間がかかりますが、ファイルが繰り返しインクルードされる場合、自動ロードを使用するとシステムのパフォーマンスが大幅に向上します。
プログラマーを解放するためにオートロードを使用するかどうかについては、見る人や賢明な人によって異なります。私の意見では、条件が許せば、開発をより便利にするためにこのパフォーマンスを犠牲にする価値があります (場合によっては、パフォーマンスが向上する可能性もあります)。