Делает что-то вроде
_________________________ //index.php ... require("header.php"); ... _________________________ _________________________ //header.php printHeader() function printHeader(){ echo 'something'; ... } _________________________
считается плохой практикой, чтобы избежать?
Я лично считаю, что выполнение вызова require()
(или require_once()
или include()
, а это не тот) должен только добавить ссылку на другие функции / объекты и никогда ничего не выполнять самостоятельно. Другими словами, по моему мнению, требование должно вести себя очень похоже на импорт / использование других языков оо.
Пример, который я написал выше, довольно тривиален, но, очевидно, я пишу также против всякого рода «побочных эффектов». Функция определения или некоторые трюки с сеансами – это другие злоупотребления, которые я часто обнаружил в некоторых включенных файлах.
Да, ИМХО это (очень) плохая практика, если она не была явно задокументирована .
include
или require
(и их эквиваленты на других языках), как правило, должны вводить новые функции в текущую область действия и никогда не запускать их вызов.
Это вопрос общего дизайна, а не личных предпочтений. Если вы можете проектировать с личными предпочтениями, то это ваши личные предпочтения. Делайте все, что захотите, используйте язык как инструмент .
Например, если вы используете PHP в качестве замены для серверной части, это довольно распространенное явление, которое включает в себя в основном HTML с некоторыми фрагментами PHP. С этим были построены великолепные объекты. Нет ничего плохого в таком дизайне в реальном мире.
Однако, если вам нужен более мелкозернистый элемент управления, вы в основном ссылаетесь на объекты, а не на файлы. В этом случае я предлагаю вам не включать никаких включений в ваш код, но автозагрузчик, который по мере необходимости требует по запросу имени класса в вашем приложении.
Пример, который у вас есть в вашем вопросе, однако, выглядит так, что в любом случае концепции для него мало, возможно, это должно позволить локальным переменным внутри include, однако этого легче достичь, включив динамически внутри вспомогательной вспомогательной функции, например:
/** * include a file with it's own local scope. * * @param string path to include file * @param array (optional) variables, keyed with variable name. * @return mixed return value of include */ function include_helper() { if (!func_num_args()) { return NULL; } elseif (2 === func_num_args() && is_array(func_get_arg(1))) { extract(func_get_arg(1)); } return include(func_get_arg(0)); }
И поэтому запасные для определения функции внутри каждого включают в себя то же имя, что и include.