Передача переменной из одного PHP включают в файл в другое: глобальный и не



Я пытаюсь передать переменную из одного заголовочного файла в другой. Это не работает, если я не объявляю переменную как глобальную во втором файле включения. Однако мне не нужно объявлять его глобальным в файле, который вызывает первый include. Например:





фронт.inc:



$name = 'james';



.php:

include('front.inc');
echo $name;
include('end.inc');


выход: Джеймс





конец.inc:



echo $name;


выход: ничего





Если я объявляю глобальное $name до Эхо $name В конце.Инк, тогда он работает правильно. Принятый ответ на этот пост объясняет, что это зависит от конфигурации вашего сервера: передача переменных в PHP из одного файла в другой



Я использую сервер Apache. Как бы я настроил его так, чтобы объявление $name глобальным не было необходимо? Есть ли преимущества/недостатки одного и другого?

694   4  

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();

Это все, что вам нужно сделать:

перед.inc

global $name;
$name = 'james';

у меня есть странное решение. в файле end.inc добавьте следующую строку:

$name=$name;

тогда эхо будет работать.

Я попал в это решение в моем проекте, без хорошего объяснения, почему он работал так.

Comments

    Ничего не найдено.