У меня есть некоторые проблемы с включением файлов относительно. Проблема заключается не в том, что require_once не может найти файл, а в том, что он может найти файл в том месте, где нет файла. Я разделил проблему на три небольших класса.php require_once содержит файлы, относящиеся к файлу, а не рабочий каталог
Так что это мой реж структура:
public_html/
index.php
commands/
CommandFactory.php
account/
Status.php
index.php:
require_once 'commands/CommandFactory.php';
$factory = new CommandFactory();
CommandFactory.php:
class CommandFactory{
public function __construct()
{
echo getcwd() . '<br/>'; //xxx\public_html (which is good, this is where index.php is
//require_once 'account/Status.php'; // This works as expected
require_once 'account/Status.php'; // This ALSO works, but it shouldn't
$status = new Status(); // This works, though it shouldn't.
}
}
я испытал, перемещая CommandFactory к другому dir, что решает проблему. Однако я не могу понять, почему файл может быть включен. Он не должен включать Status, относительно CommandFactory, он должен относиться к index.php. Я добавил текущий рабочий каталог, чтобы посмотреть, что пойдет не так, но я не могу понять. Кто-нибудь знает, как и почему это работает?
Может кто downvoted мой вопрос объяснить, почему? – David
Если вы требуете, чтобы путь относился к текущему файлу. Не индекс, так или иначе, включая файл внутри класса, фактически не является хорошей практикой. Вы обязательно должны изучить автозагрузку своих классов. – DarkBee
«Если вам нужно, чтобы путь был относительно текущего файла». Это не правильно ». И я знаю, что я делаю в ООП. Кроме того, если это относилось к текущему файлу, почему« команды/account/Status.php »также работают? – David