@StasM 是对的。但这里有更多的解释。
告诉 PHP在include_path
执行 an include
、 an include_once
、 arequire
或 a时到哪里查看require_once
。当然,这些include
s 和require
s 总是引用一个特定的文件。
自动加载专门针对缺少的类。当在代码中引用尚未加载的类时 - 通常,但不限于,通过调用new
运算符,如在您的示例中 - 然后自动加载是一个可以使用用于加载类的算法的过程。这个过程通常涉及从丢失的类的名称开始,并从丢失的类的名称中生成一个可能的路径名集合——文件系统中的绝对路径名或相对于条目中的条目,include_path
然后执行一个include
以希望该类定义存在于其中之一。
在您的情况下,您已经调用了一个名为“Test”的类。包含此类的文件位于文件中APPLICATION_PATH . 'tests/Test.php'
。并且您已将目录APPLICATION_PATH . 'tests'
放在include_path
. 但在有一个自动加载算法到位之前,系统无法将类名连接'Test'
到文件名'Test.php'
。
PEAR 风格的类名约定将提供这种连接。使用该约定的自动加载器(如默认的 Zend Framework 自动加载器)将能够执行从类名到文件名的映射,然后include
是所需的文件。
最后一个复杂的问题是,传统的 Zend Framework 目录布局约定将某些类放在不在包含路径上的文件夹中:模型、表单、服务、控制器、视图助手、动作助手等。这就是为什么您经常会看到更多配置自动加载器 - 通常在Bootstrap
类中 - 定义某些类名和文件系统中某些位置之间的映射,这些位置不在include_path
.
例如,一个名为“Default_Model_User”的类可能——乍一看——应该驻留在include_path
文件中'Default/Model/User.php'
。但是标准的应用程序目录结构希望将该文件放在“application/models/User.php”中。注意路径名中的复数“models”和小写的“m”,以及类名中“Default”的存在。为了理解这一点,需要在自动加载器上进行额外配置,为类名到文件名映射提供模式。这通常通过资源自动加载器来完成。
希望这对您或其他人有所帮助。干杯!