0

通常、クラスを自動ロードするときに参照するパス/ディレクトリの事前定義されたセットを使用して、ユーザーがハイドレートする必要がある複雑な自動ロード ソリューションを目にします。または、複雑な glob のような検索を行い、キャッシュ ファイルを作成してルックアップ時間を短縮します。

ただし、各クラスに名前を付け、それらの名前空間がそれらを含むディレクトリ構造と一致している限り、オートローダーをこれ以上複雑にする必要はないことに気付きました。

spl_autoload_register(function ($class) {
    include $class . '.php';
});

名前空間のないサードパーティのクラスを使用する必要がないと仮定すると、フォルダ構造に従ってクラスの名前を付けず、spl_autoload_register にすべてを処理させない理由はありますか?

私が見落としている落とし穴はありますか?

4

1 に答える 1

0
<?php

/**
 * Ultra fast class autoloader.
 *
 * @param string $class
 *   Fully qualified class name (automatically passed to this magic function by PHP).
 */
function __autoload($class) {
  static $ds = DIRECTORY_SEPARATOR;
  $class = strtr($class, "\\", DIRECTORY_SEPARATOR);
  require "{$_SERVER["DOCUMENT_ROOT"]}{$ds}src{$ds}{$class}.php";
}

?>

それについて何が良いですか?

  • より高速な実装は考えられません
  • これは通常の関数であり、クロージャではありません
  • マジック関数は SPL ローダーの前に呼び出されます
  • すべてのプラットフォームで動作します ( DIRECTORY_SEPARATOR)
  • インクルード用の絶対パスを作成します (Linux パス/ファイル キャッシュ)
  • 文字列を連結するのではなく、文字列部分を埋め込みます
  • strtr()最速の文字列置換関数です

欠点

  • クラスがディレクトリ構造に適合している限り: なし
  • ライブラリや他の人 (composer など) からのものを含めたい場合、問題があり、オートローダーが上書きされ、それらのファイルが読み込まれません (これが要件でない場合は、心配する必要はありません)。
于 2013-10-16T07:24:42.413 に答える