この記事では、SPL_AUTOLOAD_REGISTER()を使用して、需要のあるクラスをロードするPHP 7のオートローディングについて説明します。名前空間ベースのオートローディングやパフォーマンスの最適化のためのキャッシュなどのベストプラクティス、一般的な問題に対処します(例えば、クラスは見つかりません
PHP 7の自動装備により、クラスをオンデマンドでロードすることができ、各クラスのファイルを手動で含める必要がなくなります。これにより、コード組織が大幅に改善され、アプリケーションの初期読み込み時間が短縮されます。 PHP 7は、 spl_autoload_register()
関数を使用してオートローダーを管理します。この関数は、クラスまたはインターフェイスが使用されているがまだ定義されていないときに実行されるコールバック関数を登録します。
オートローディングを実装する最も簡単な方法は、単一の関数を使用することです。
<code class="php"><?php spl_autoload_register(function ($class) { $file = __DIR__ . '/classes/' . $class . '.php'; if (file_exists($file)) { require_once $file; } }); // Now you can use classes without explicitly including them $myObject = new MyClass(); ?></code>
このコードは、クラス名を引数として取得する匿名関数を登録します。クラスが現在のディレクトリ内のclasses
ディレクトリにあると仮定して、ファイルパスを構築します。次に、ファイルが存在するかどうかをチェックし、複数の包含を防ぐためにrequire_once
を使用して含めます。 __DIR__
現在のファイルのディレクトリを提供し、コードをよりポータブルにします。 classes
ディレクトリを作成し、クラスファイル( MyClass.php
など)を内部に配置することを忘れないでください。
いくつかのベストプラクティスは、パフォーマンスのためにオートローディングを最適化できます。
<code class="php"><?php spl_autoload_register(function ($class) { $prefix = 'MyNamespace\\'; $base_dir = __DIR__ . '/classes/'; if (strpos($class, $prefix) !== 0) { return; } $relative_class = substr($class, strlen($prefix)); $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php'; if (file_exists($file)) { require_once $file; } }); ?></code>
この例は、 MyNamespace
名前空間内のクラスを処理し、それらを対応するディレクトリ構造にマッピングします。
require_once
require
よりも安全ですが遅いです。複数の包含物に対して保証する必要がある場合にのみ、 require_once
使用します。オートローディングのコアコンセプトは同じままですが、PHP 7はパフォーマンスと一貫性の改善を提供します。
spl_autoload_register()
関数とその使用法は、PHP 7を含むPHP 5.3以降のバージョンでほぼ一貫しています。spl_autoload_register()
を使用した自動装置への標準化されたアプローチは、異なるプロジェクトでより一貫したコードを促進します。自動装置の一般的な問題は次のとおりです。
require_once
代わりにrequire
を使用する場合、クラスの定義が重複しているために問題が発生する可能性があります。常に自動装置にrequire_once
好みます。効果的なトラブルシューティングには、
echo
またはvar_dump
ステートメントを追加して、生成されたファイルパスやクラス名を含むオートローダーの実行フローをトレースします。これらのベストプラクティスとトラブルシューティング手法に従って、コード組織、保守性、パフォーマンスを改善するために、PHP 7に自動装置を効果的に実装できます。
以上がPHP 7でクラスを自動装備する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。