2012-06-24 6 views
0

У меня есть файл, скажем, это index.php, где в самом начале файла есть include для include.php. В include.php я установить переменную так:Как передать переменную php в .php include?

<?php $variable = "the value"; ?> 

затем дальше вниз в index.php я другой включают, скажем, «include2.php», который входит так:

<?php include(get_template_directory_uri() . '/include2.php'); ?> 

Как я могу назвать «переменную $», которую я установил в первом include, в «include2.php»?

Точный код, который я использую выглядит следующим образом:

Самая первая строка index.php у меня есть эта линия

<?php include('switcher.php'); ?> 

Внутри switcher.php я это

<?php $GLOBALS["demo_color"] = "#fffffe"; ?> 

Если я использую это в index.php, он работает

<?php echo $GLOBALS["demo_color"]; ?> 

Однако, если я использую следующий код, чтобы включить другой PHP файл

<?php include(get_template_directory_uri() . '/demo_color.php'); ?> 

затем внутри demo_color.php у меня есть этот код:

<?php echo "demo color:" . $GLOBALS["demo_color"]; ?> 

Единственное, что он выводит на «демо цвет: "

отредактированы для кода форматирования

+0

Можете ли вы прокомментировать вывод 'var_dump ($ GLOBALS)' как непосредственно перед включением demo_color.php, так и в первую строку этого файла? Либо поделитесь интересными частями, либо посмотрите, как они сравниваются (есть ли в действительности * не * a «demo_color» ключ в конце? –

+0

Хорошо, есть тонна переменных, но я сделал var_dumb ($ GLOBALS) перед demo_color. php include в index.php, а затем внутри include. Вы можете видеть, где внутри внутри include начинается поиск «var dump from inside demo_color.php» http://www.brainbuzzmedia.com/themes/vertex/ –

ответ

3

Это просто может использоваться в include2.php, если включение include.php не происходит внутри другой области (т.е. внутри вызова функции). see here.

Если вы хотите быть полностью явным о намерении с помощью переменной через приложение, используйте $ GLOBALS [ «переменная»] версии это имя, которое будет всегда точка переменной называется variable в глобальной объем.

EDIT: Я провел тест против PHP 5.3.10 для восстановления этого:

// index.php 
<?php 
include("define.php"); 
include("use.php"); 

// define.php 
$foo = "bar"; 

// use.php 
var_dump($foo); 

Это работает точно так, как и ожидалось, вывод строки (3) "бар".

+0

По какой-то причине это не работает. Я обновил исходный вопрос тем, что я пробовал. –

+0

Как вы можете видеть в моем редактировании, я тестировал объявление-в-одном-include/use-in-another, и он работал как ожидаемый. Возможно, вам понадобится поделиться более конкретным кодом, чтобы определить вашу проблему. –

+0

Будет ли это в Wordpress иметь к этому какое-либо отношение? Я добавил точный код, даже код определения/использования, и я не могу получить какой-либо вывод. Может ли это иметь какое-то отношение к настройкам сервера или разрешениям? –

1
<?PHP 
//index.php 
$txt='hello world'; 
include('include.php'); 

<?PHP 
//include.php 
echo $txt; //will output hello world 

Так оно и работает. Хотя, похоже, существует большая проблема, поскольку в будущем это будет трудно поддерживать. Просто перенос переменной в глобальное пространство имен и использование ее в разных файлах не является лучшей практикой.

Чтобы сделать код более ремонтопригодным, может возникнуть идея использовать классы, чтобы вы могли прикрепить нужные вам переменные, а не просто использовать их. Поскольку код не показан, неясно, в чем ваша конкретная необходимость, но, скорее всего, код может быть помещен в классы, функции и т. Д.Если это шаблон, вы можете подумать о явной функции set() для отправки данных переменных в шаблоны и extract() там.

редактировать:

Кроме того на основе информации первого установить error_reporting на E_ALL и задать display_errors к 1. Таким образом, вы получите все ошибки, так как информация, которую вы помещены в обновленном вопросе дает указание о том, что отсутствует переменный используется как константа, которая должна поднимать ошибки повсюду.

+0

Есть одна деталь, оставшаяся от этого, которая может быть основной. Файл, в котором объявлена ​​переменная, по-прежнему находится в области действия при запуске include.php. Немного более сложный тест в порядке, когда файл, в котором объявлена ​​переменная, выходит за пределы области видимости (т. Е. Объявляется в одном include и используется позже). –

+0

Я не полностью понимаю ваше сообщение, насколько я вижу: вы вызываете index.php. Вложения должны быть в папке, не доступной в Интернете, поэтому они никогда не будут вызываться из Интернета в любом случае. –

+0

Правильно, а не из Интернета. Когда я говорю «вне сферы действия», я имею в виду, что файл «завершает выполнение» и возвращается к точке в коде, из которого он был включен. Я задавался вопросом, будет ли в этот момент любые переменные, объявленные в файле, уничтожены; но я проверил тест, и это не то, что происходит. –

Смежные вопросы