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 类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top