spl_autoload_registerこの種の仕事はできますが、その種の仕事がどのように行われるのかわかりません。
spl_autoload_register(array('Doctrine', 'autoload'));
spl_autoload_registerこの種の仕事はできますが、その種の仕事がどのように行われるのかわかりません。
spl_autoload_register(array('Doctrine', 'autoload'));
include基本的な考え方は、 /命令をもう書く必要がないということrequireです: 定義されていないクラスを使おうとするときはいつでも、PHP はオートローダーを呼び出します。
オートローダーの仕事は、どのファイルをロードするかを決定することでありinclude、それによってクラスが定義されます。
includeその後、PHPは、実際にはオートロード関数で実行された命令を記述したかのように、そのクラスを使用できます。
「トリック」は、オートローディング機能です:
これが、PEAR などの命名規則の理由です。この命名規則では、 などのクラスは などのProject_SubProject_Component_Nameファイルにマップされます。Project/SubProject/Component/Name.phpつまり、クラス名の ' ' は、ファイル システムではスラッシュ(ディレクトリ、サブディレクトリ)_に置き換えられます。
たとえば、Doctrine_Core::autoloadあなたのケースでオートローダーとして呼び出されるメソッドを見ると、コードのこの部分が含まれています(いくつかの特定のケースを処理した後):
$class = self::getPath()
. DIRECTORY_SEPARATOR .
str_replace('_', DIRECTORY_SEPARATOR, $className)
. '.php';
if (file_exists($class)) {
require $class;
return true;
}
return false;
つまり、クラス名がファイルシステムにマップされ、' _' が ' 'に置き換えられ、ファイル名に/末尾が追加.phpされます。
たとえば、Doctrine_Query_Filter_Chainクラスを使用しようとしていて、それが PHP によって認識されていない場合、Doctrine_Core::autoload関数が呼び出されます。ロードする必要があるファイルが次のように決定されますDoctrine/Query/Filter/Chain.php。Doctrine_Query_Filter_Chainそのファイルが存在するので、それが含まれます。これは、PHP がクラスを「認識する」ことを意味します。