Объявление глобальной переменной внутри функции

У меня есть два файла PHP. В первом я установил cookie на основе значения $_GET , а затем вызовет функцию, которая затем отправит это значение в другой файл. Это код, который я использую в join.php :

 include('inc/processJoin.php'); setcookie("site_Referral", $_GET['rid'], time()+10000); $joinProc = new processJoin(); $joinProc->grabReferral($_COOKIE["site_Referral"]); в include('inc/processJoin.php'); setcookie("site_Referral", $_GET['rid'], time()+10000); $joinProc = new processJoin(); $joinProc->grabReferral($_COOKIE["site_Referral"]); 

Другой файл ( processJoin.php ) затем отправит это значение (среди прочего) в дополнительные файлы, которые будут обрабатывать и вставлять данные в базу данных.

Проблема, с которой я сталкиваюсь, заключается в том, что когда grabReferral() функция grabReferral() в processJoin.php , переменная $referralID не определяется в глобальном масштабе – другие функции в processJoin.php не могут получить доступ к ней для отправки к другим файлам / процессам.

Я пробовал это в processJoin.php :

 grabReferral($rid) { global $ref_id; $ref_id = $rid; } someOtherFunction() { sendValue($ref_id); } 

Но someOtherFunction не может получить доступ или использовать значение $ref_id . Я также попытался использовать define() безрезультатно. Что я делаю не так?

Solutions Collecting From Web of "Объявление глобальной переменной внутри функции"

вам также нужно определить глобальную переменную var во второй функции.

 // global scope $ref_id = 1; grabReferral($rid){ global $ref_id; $ref_id = $rid; } someOtherFunction(){ global $ref_id; sendValue($ref_id); } 

Феликс

лично я бы рекомендовал супер переменную $GLOBALS .

 function foo(){ $GLOBALS['foobar'] = 'foobar'; } function bar(){ echo $GLOBALS['foobar']; } foo(); bar(); 

DEMO

Это простой и рабочий код для инициализации глобальной переменной из функции:

 function doit() { $GLOBALS['val'] = 'bar'; } doit(); echo $val; 

Дает вывод как:

 bar 

Следующие работы.

 <?php foo(); bar(); function foo() { global $jabberwocky; $jabberwocky="Jabberwocky<br>"; bar(); } function bar() { global $jabberwocky; echo $jabberwocky; } ?> 

производить:

бессмыслица
бессмыслица

Таким образом, кажется, что переменная, впервые объявленная как глобальная внутри функции, а затем инициированная внутри этой функции, получает глобальную область.

global ключевое слово позволяет получить доступ к глобальной переменной, а не создавать ее. Глобальные переменные – это те, которые созданы во внешней области (т. Е. Не внутри функции или класса), и не доступны внутри функции, если вы не объявляете их global .

Отказ от ответственности: ни один из этих кодов не был протестирован, но он определенно имеет смысл.

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

 function my_function(){ //... $GLOBALS['myGlobalVariable'] = 42; //globalize variable //... } 

Теперь, когда вы хотите получить доступ к переменной из кода, запущенного в глобальной области, то есть НЕ внутри функции, вы можете просто использовать $ name для доступа к ней, не ссылаясь на массив $ GLOBALS.

 <?php //<global scope> echo $myGlobalVariable; //outputs "42" //</global scope> ?> 

Чтобы получить доступ к своей глобальной переменной из неглобальной области, такой как функция или объект, у вас есть два варианта:

  1. Получите доступ к нему через соответствующий индекс массива $ GLOBALS. Пример: $GLOBALS['myGlobalVariable'] Это займет много времени, особенно если вам нужно использовать глобальную переменную несколько раз в своей неглобальной области.
  2. Более сжатый способ – импортировать глобальную переменную в локальную область с помощью выражения «global». После использования этого оператора вы можете ссылаться на глобальную переменную, как на локальную переменную. Изменения, внесенные вами в переменную, будут отражаться в глобальном масштабе.

      //<non global scopes> function a(){ //... global $myGlobalVariable; echo $myGlobalVariable; // outputs "42" //... } function b(){ //... echo $GLOBALS['myGlobalVariable']; // outputs "42" echo $myGlobalVariable; // outputs "" (nothing) // ^also generates warning - variable not defined //... } //</non global scopes> 

Пожалуйста, используйте глобальные переменные на любом языке с осторожностью, особенно в PHP.

Для обсуждения глобальных переменных см. Следующие ресурсы:

Видимость переменной

Я надеюсь, что это помогло

 <?php $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b; ?>