Это похоже на проблему с переводчиком, а не с тем, кто это опубликовал. Это немного грубо, что человек, отправивший причуду, был поражен отрицательными голосами.

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

front.inc:

$name = 'james';

index.php:

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

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

end.inc:

echo $name;

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

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

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

 deceze♦13 янв. 2011 г., 02:36
Этотдолжен работать как написано!
 dqhendricks13 янв. 2011 г., 02:32
эхо в end.inc внутри функции?
 maxedison14 янв. 2011 г., 22:01
эхо в end.inc не внутри функции. Предположим, что три файла, которые я описал выше, содержат не больше и не меньше, чем именно то, что я написал.
 dqhendricks13 янв. 2011 г., 02:34
это сломало бы область видимости переменной. и в этом случае вы, вероятно, должны передать $ name функции в качестве аргумента.
 dqhendricks13 янв. 2011 г., 02:32
включает не как функции. include не нарушает область видимости переменной. это как если бы вы скопировали и вставили содержимое включаемых файлов непосредственно в вызывающий скрипт.

Ответы на вопрос(1)

Решение Вопроса

он действует так, как будто код существует в файле, из которого они включаются. Представьте себе, скопируйте и вставьте код из каждого из ваших включенных файлов прямо в вашindex.php, Вот как PHP работает с включает.

Итак, в вашем примере, так как вы установили переменную с именем$name в вашейfront.inc файл, а затем включены обаfront.inc а такжеend.inc в вашейindex.php, Вы сможетеecho переменная$name где-нибудь послеinclude изfront.inc в вашемindex.php, Опять же, PHP обрабатывает вашиindex.php как будто код из двух файлов, которые вы включаетечасть файла.

Когда вы размещаетеecho в пределах включенного файла к переменной, которая не определена внутри себя, вы не получите результат, потому что он обрабатывается отдельно, чем любой другой включенный файл.

Другими словами, чтобы выполнить ожидаемое поведение, вам нужно определить его как глобальное.

 maxedison14 янв. 2011 г., 23:50
идеальный. спасибо майкл
 biscuitstack04 сент. 2018 г., 19:47
Как и принятый ответ, его исправление также неверно (или устарело). В PHP7 (по крайней мере) я могу определить переменную вincluded1.php и ссылаться на это позже вincluded2.php без ссылки на это вparent.phpи получите значение, которое я определил вincluded1.php, Я следую тем же правилам области действия, что и если бы весь код находился на одной странице. Ничего больше.
 Joshua Flood10 дек. 2018 г., 08:31
Отклонено, потому что первые два абзаца явно противоречат следующему предложению.
 Michael Irigoyen14 янв. 2011 г., 22:10
Да, это звучит правильно. Извините, если я то, что я сказал, сбило с толку. Я редактировал его 5 раз, потому что мне было очень сложно описать процесс, не потеряв вас. Таким образом, у родительского файла есть доступ к переменным в обоих включенных файлах, но у включенного файла нет доступа к другому включенному файлу. Если это имеет смысл.
 maxedison14 янв. 2011 г., 22:00
Ваш ответ, кажется, противоречит самому себе. Вы пару раз говорили, что включение файла такое же, как если бы весь код был просто частью одного файла. Поэтому то, что я описал в своем посте, будет эквивалентно: $ name = 'james'; echo $ name; echo $ name; - Это должно произвести Джеймса Джеймса. Но ваш предпоследний абзац противоречит тому, что я только что описал. Возможно, вы имеете в виду, что ТОЛЬКО файл, выполняющий вызов include, имеет доступ к переменным включенного файла, поэтому другие включенные файлы НЕ имеют доступа к этим переменным. Это правильно?

Ваш ответ на вопрос