На странице, над которой я работаю, первое, что я делаю, это включить мой файл tools.php
. Скажем, index.php
Вызов «требуется» внутри функции
require("../scripts/tools.php");
Далее, создать пользовательский CSS
$custom_css = [
$link([
"rel" => "stylesheet",
"type" => "text/css",
"media" => "screen",
"href" => BASE . "css/layout-list.css",
]),
];
и включают в себя элемент головки с помощью пользовательской функции требуют которая объявлена внутри tools.php
.
req("template/head.php");
Причина я использую обычай require
потому, что мне нужно увеличить ../
с на каждом пути каждый раз, когда я иду глубже в структуру папок. Я не хочу добавлять их вручную.
Существует base()
функции в tools.php
и он автоматически вычисляет ../
s необходимо для достижения обратно в основную папку, и присваивает его постоянная BASE
. Эта BASE
константа используется в req()
функции
function req($path) {
require(BASE . $path);
}
Это (вид) работает. Проблема состоит в том, что поскольку (фактическое) требование вызвано внутри функции, head.php
не может получить доступ к $custom_css
, а index.php
не может получить доступ к любой переменной внутри head.php
.
Решение, с которым я столкнулся, состоит в том, чтобы объявить, что переменная является глобальной, прежде чем использовать ее.
Так что, если у меня есть доступ к $custom_css
, который находится в index.php
от head.php
, в head.php
я:
global $custom_css;
if (!isset($custom_css)) {
$custom_css = [];
}
и если у меня есть доступ к переменной, которая находится в head.php
от index.php
, я должен объявить переменную глобально внутри head.php
:
global $head_var;
$head_var = 4;
Этот процесс кажется очень утомительным и излишним. Разве нет способа изменить, где эффекты require
? Сделать все переменные во включенном файле глобальными, даже если файл был включен в функцию?
Не можете ли вы сделать что-то вроде 'require (req ('someting_here'));'? Просто верните то, что требуется, не 'require()' внутри функции. – FirstOne
@FirstOne Я предполагаю, что вы прочитали ответ BeetleJuice и мой комментарий. Если нет общего решения, я, вероятно, буду использовать это. – akinuri