как расположить файл за пределами главной директории php ооп
Подскажите пожалуйста возможно ли расположить файл за пределами главной директории php?
У меня есть файл с классом для примера путь будет t2.php
<?php
class Test {
...
}
?>
в другом файле t1.php что бы обратится к классу расположенному в t2.php я использую оператор use. Пока оба файла находятся в пределах главной директории всё работает хорошо и мне не понять как правильно вынести файл с классом что бы всё работало хорошо и правильно.
Пробовал dirname(__DIR__, 1) прописать в use не помогло =(
Есть какие то решения данной задачи?
Ответы (1 шт):
Чтобы использовать один класс в другом, то его надо подключить не через use, а через require или include. Т.е. в начале файла с классом Test Надо прописать include файла с другим классом. И вот уже в include можно прописать пути вне текущей директории, например include __DIR__ . './../../SomeFile.php'
Однако этот способ при работе с множеством классов и ООП неэффективен, т.к. потребуется миллион всяких include. Для автозагрузки классов рекомендую ознакомиться с автозагрузкой классов у PHP: spl_autoload_register. Но там придётся прописать небольшую логику для их загрузки. И не забывать применять в файлах namespace, use и распологать классы структурно корректно.
Также можно использовать для автозагрузки файлов composer. Рекомендую ознакомиться что это такое и, в частности, с composer-autoload (https://getcomposer.org/doc/04-schema.md#autoload)
В его конфиге можно будет определить в какой папке будут находиться все классы, например так:
{
"autoload": {
"psr-4": { "app\\": "src/" }
}
}
Теперь надо будет лишь соблюдать правильную иерархию папок при разработки и не забывать указывать этот namespace в классах (https://www.php.net/manual/ru/language.namespaces.definition.php) ну и потом использовать use соответственно
Например если один класс находится в /src/user/hello.php, то его namespace будет например namespace app\user;, и подключение его в другом классе будет как use app\user;