Если вы не используете автозагрузчик (see 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() не рекомендуется и может быть устаревшим или удаленным в будущем. См. the PHP Ref.
Предлагаем вам ознакомиться с PSR-0 standard, и вы можете, возможно, просто use the SplClassLoader.php gist.
Вам нужно будет переименовать классы следовать пространства имен и путей стандартов, но тогда вы можете просто сделать что-то вроде:
//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!
См Why doesn't PHP's Autoload feature work in CLI mode? для обсуждения с помощью автозагрузчика из командной строки (CLI) скриптов.
3. Используйте автозагрузчик –