Я действительно не вижу положительного преимущества от использования анонимных пространств имен в заголовках. Беспорядок, который может следовать из наличия того же среднего объявления символа, в сущности, другая вещь в единицах компиляции, которые включают тот заголовок, был бы гарантируемым способом пойти преждевременно и крайне лысый.
Обычно у меня есть файл с именем config в корне моего приложения, и в нем я определяю константу для базового пути и некоторых других:
define('APP_BASE_PATH', dirname(__FILE__));
define('APP_FUNCTIONS_PATH', APP_BASE_PATH . '/functions');
и я включаю свои файлы, такие как
include (APP_BASE_PATH . 'includes/another_file.php');
include (APP_FUNCTIONS_PATH . '/function_file.php');
таким образом я могу разместить свое приложение в любом каталоге, плюс я могу перемещать файлы без особых проблем.
также использование полного пути ускоряет включение
или ...
include ($ _ SERVER ['DOCUMENT_ROOT']. '/ Includes / header.php');
Я предпочитаю устанавливать переменные среды (в Apache, используя .htaccess или .conf). Таким образом, вы можете свободно перемещать все свои файлы в любом месте корневого веб-каталога, и он будет иметь доступ к этим переменным.
SetEnv lib /library/folder/
SetEnv public /my/web/root/
SetEnv environ DEVELOPMENT
Также вы можете использовать переменную с именем «environment», упомянутую выше.
Относительные и абсолютные пути в PHP немного ненадежны, потому что они зависят не только от текущего каталога включаемого файла, но и от текущего рабочего каталога.
Итак, вам нужно решение, состоящее из двух частей.
Во-первых, вам нужен перенаправитель. По сути, это включаемый файл, который служит единой точкой вызова для всех остальных страниц. Его задача - включить остальную часть вашей инфраструктуры. Все ваши страницы вызывают этот перенаправитель и только этот перенаправитель (но вы можете связать их).
Этот перенаправитель теперь выполняет
include_once dirname(__FILE__).'/include/include.php';
Это позволяет вам изменить включаемый файл инфраструктуры или расположение, и все, что вам нужно обновить, - это один файл. Вызов dirname ()
решает все относительные и абсолютные проблемы и заставляет искать следующий шаг относительно себя. И по определению это меняется только тогда, когда вы его меняете, так что он всегда будет работать.
Вторая часть - это настраиваемый модуль включения, поэтому вы можете вызывать контент по имени с помощью функции, и она отправляется и получает нужный файл. Захоронить это в каталоге инфраструктуры - вот куда надо. Затем он становится черным ящиком, который страницы за пределами этой области вызывают, не зная и не имея необходимости знать, как он работает и где находится. Это устраняет необходимость в константах пути для включения фрагментов страницы, потому что у вас есть одно место, делающее все за вас.