Передача переменной из одного php включает файл в другой: global vs. not
Я пытаюсь передать переменную из одного файла include в другой. Это НЕ работает, если я не объявляю переменную глобальным во втором файле include. Однако мне не нужно объявлять его глобальным в файле, который вызывает первый include. Например:
front.inc:
$name = 'james';
index.php:
include('front.inc');
echo $name;
include('end.inc');
вывод: james
end.inc:
echo $name;
вывод: ничего
ЕСЛИ я объявляю глобальное имя $перед повторением $name в end.inc, тогда он работает правильно. В принятом ответе на этот пост объясняется, что это зависит от конфигурации вашего сервера: Передача переменных в PHP из одного файла в другой
Я использую сервер Apache. Как настроить его так, чтобы объявление глобального имени не было необходимым? Существуют ли преимущества/недостатки для одного и другого?
Ответы
Ответ 1
При включении файлов в PHP он действует как код в файле, из которого они включены. Представьте копию и вставку кода из каждого из ваших включенных файлов непосредственно в ваш index.php
. Вот как работает PHP с.
Итак, в вашем примере, поскольку вы установили переменную с именем $name
в свой файл front.inc
, а затем включили как front.inc
, так и end.inc
в index.php
, вы сможете echo
переменная $name
где-нибудь после include
of front.inc
внутри вашего index.php
. Снова PHP обрабатывает ваш index.php
, как если бы код из двух файлов, которые вы включаете, содержит часть файла.
Когда вы помещаете echo
внутри включенного файла в переменную, которая не определена внутри себя, вы не получите результат, потому что он обрабатывается отдельно, а затем любой другой включенный файл.
Другими словами, чтобы выполнить поведение, которое вы ожидаете, вам нужно будет определить его как глобальный.
Ответ 2
Здесь есть ловушка, которой нужно избегать. Если вам нужно получить доступ к переменной $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();
Ответ 3
Это все, что вам нужно сделать:
В front.inc
global $name;
$name = 'james';
Ответ 4
У меня странное решение.
в файле end.inc
, добавьте эту строку:
$name=$name;
Тогда эхо будет работать.
Я попал в это решение в своем проекте, без хорошего объяснения, почему он работает следующим образом.