Передача переменной из одного PHP включают в файл в другое: глобальный и не
Я пытаюсь передать переменную из одного заголовочного файла в другой. Это не работает, если я не объявляю переменную как глобальную во втором файле включения. Однако мне не нужно объявлять его глобальным в файле, который вызывает первый include. Например:
фронт.inc:
$name = 'james';
.php:
include('front.inc');
echo $name;
include('end.inc');
выход: Джеймс
конец.inc:
echo $name;
выход: ничего
Если я объявляю глобальное $name до Эхо $name В конце.Инк, тогда он работает правильно. Принятый ответ на этот пост объясняет, что это зависит от конфигурации вашего сервера: передача переменных в PHP из одного файла в другой
Я использую сервер Apache. Как бы я настроил его так, чтобы объявление $name глобальным не было необходимо? Есть ли преимущества/недостатки одного и другого?
4 ответов:
при включении файлов в PHP он действует так, как будто код существует в файле, из которого они включены. Представьте, что вы копируете и вставляете код из каждого из ваших включенных файлов непосредственно в ваш
index.php. То есть, как PHP работает с включает в себя.Итак, в вашем примере, так как вы установили переменную с именем
$nameв своемfront.incфайл, а затем включены обаfront.incиend.incв своемindex.phpвы сможетеechoпеременная$nameв любом месте послеincludeнаfront.incв своемindex.php. Опять же, PHP обрабатывает вашindex.phpкак будто код из двух файлов, которые вы включаете,часть из файла.когда вы размещаете
echoвнутри включенного файла, к переменной, которая не определена внутри себя, вы не получите результат, потому что он обрабатывается отдельно, а затем любой другой включенный файл.другими словами, чтобы сделать поведение, которое вы ожидаете, вам нужно будет определить его как глобальный.
вот ловушка, чтобы избежать. Если вам нужно получить доступ к переменной $name внутри функции, вам нужно сказать "global $name;" в начале этой функции. Вы должны повторить это для каждой функции в том же файле.
include('front.inc'); global $name; function foo() { echo $name; } function bar() { echo $name; } foo(); bar();покажет только ошибки. Правильный способ сделать это:
include('front.inc'); function foo() { global $name; echo $name; } function bar() { global $name; echo $name; } foo(); bar();
у меня есть странное решение. в файле
end.incдобавьте следующую строку:$name=$name;тогда эхо будет работать.
Я попал в это решение в моем проекте, без хорошего объяснения, почему он работал так.
Comments