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

→ Ссылка