У меня есть два файла 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()
безрезультатно. Что я делаю не так?
вам также нужно определить глобальную переменную 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> ?>
Чтобы получить доступ к своей глобальной переменной из неглобальной области, такой как функция или объект, у вас есть два варианта:
$GLOBALS['myGlobalVariable']
Это займет много времени, особенно если вам нужно использовать глобальную переменную несколько раз в своей неглобальной области. Более сжатый способ – импортировать глобальную переменную в локальную область с помощью выражения «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; ?>