题
spl_autoload_register
可以做这样的工作,但我不明白怎么会这样的工作做了什么?
spl_autoload_register(array('Doctrine', 'autoload'));
解决方案
基本的想法是,你不需要写 include
/require
说明了:当你试图使用非定义的类,PHP将调动加载器。
工作的自动加载器,然后,是确定哪些文件应载, include
它的,因此类变定义。
PHP然后可以使用这一类,因为如果你是一个人写的 include
指令,已在事实上已经执行的自动加载功能。
"特技"是,自动加载功能:
- 只有收到该名称之类的
- 已经确定哪些文件载--即该文件包含这一类。
这是由于命名约定,如梨之一,它说,类如 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
;和因为该文件是存在的,它将包括在内--这意味着PHP现在"知道" Doctrine_Query_Filter_Chain
类。
不隶属于 StackOverflow