Чтобы избежать использования суперглобальных элементов, кажется, я должен использовать что-то вроде этого:
$doc_root = filter_input(INPUT_SERVER, 'DOCUMENT_ROOT');
Чтобы получить документ корень. Но без указанного фильтра это просто FILTER_UNSAFE_RAW
… какой фильтр использовать, есть ли предопределенный фильтр для путей или мне нужно создать свой собственный с помощью регулярных выражений.
Теперь, когда я отфильтровал $doc_root
мне отфильтровать от $_SERVER
суперглобальный массив каждый раз, когда я хочу его использовать? Или я должен объявить global $doc_root
внутри функции, а затем использовать это (или это действительно лучше ссылаться на $GLOBALS
массив?)?
Неплохо использовать суперглобалы как таковые. Но вы должны избегать их глубоко в вашем коде, так как это добавляет скрытую зависимость от среды и делает код более сложным для тестирования.
Поэтому, если вас беспокоит эта скрытая зависимость, вы должны взять значение в вашем фронт-контроллере и ввести его в класс, используя его. Или, если вы используете DI-контейнер, вы можете определить сервис, который возвращает это значение.
С помощью filter_input
функция здесь совсем не помогает — она просто скрывает суперглобальный доступ.
Возможно, более безопасный вариант действительно использует __DIR__
постоянная.
Других решений пока нет …