如果您不使用自动加载器(请参阅 Autoloading CLasses),则必须手动将所有必要的文件包含在所有依赖文件中。通常建议所有文件管理它们自己的所有依赖项。
如果我了解您的依赖关系,它将如下所示:
- Index.php将需要
require_once
FactoryA.php
- FactoryA.php将
require_once
A.Class.php & Log.php
- A.Class.php将
require_once
Database.php & Log.php
- Database.php 将
require_once
Log.php
另一种方法是使用__autoload
并让它根据需要为您获取所需的文件。因此,在您的
function __autoload($class_name) {
include './class/' . $class_name . '.php';
}
$a = new A();
但是,spl_autoload_register() 为自动加载类提供了更灵活的替代方案。出于这个原因,不鼓励使用 __autoload() 并且将来可能会弃用或删除。请参阅PHP 参考。
我们建议您查看PSR-0 标准,您可以只使用 SplClassLoader.php要点。
您将需要重命名您的类以遵循命名空间和路径标准,但是您可以执行以下操作:
//This is the only file you need to require
require_once('/path/to/SplClassLoader.php');
$classLoader = new SplClassLoader('Class', './class');
$classLoader->register();
$a = new A();
我编写了一个小型 CLI 参考项目来演示、检查bubba-h57/AutoLoading并从命令行运行它。您应该会看到如下结果:
[cinamon-vm] AutoLoading> php index.php
From the factory!
From the AClass!
From the Database!
Pure win!
请参阅为什么 PHP 的自动加载功能在 CLI 模式下不起作用?有关从命令行 (cli) 脚本中使用自动加载器的讨论。