как расположить файл за пределами главной директории 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;