Объявление глобальной переменной внутри функции
У меня есть два файла PHP. В первом я установил файл cookie на основе значения $_GET
, а затем вызовет функцию, которая затем отправит это значение в другой файл. Это код, который я использую в join.php:
include('inc/processJoin.php');
setcookie("site_Referral", $_GET['rid'], time()+10000);
$joinProc = new processJoin();
$joinProc->grabReferral($_COOKIE["site_Referral"]);
Другой файл (processJoin.php) затем отправит это значение (среди прочего) в дополнительные файлы, которые будут обрабатывать и вставлять данные в базу данных.
Проблема заключается в том, что когда вызывается функция grabReferral()
в processJoin.php, переменная $referralID
не определяется в глобальном масштабе - другие функции в processJoin.php
, похоже, не может получить доступ к нему для отправки другим файлам/процессам.
Я пробовал это в processJoin.php:
grabReferral($rid) {
global $ref_id;
$ref_id = $rid;
}
someOtherFunction() {
sendValue($ref_id);
}
Но someOtherFunction не может получить доступ или использовать значение $ref_id
. Я также пытался использовать define()
безрезультатно. Что я делаю неправильно?
Ответы
Ответ 1
вам нужно также определить глобальную переменную var во второй функции.
// global scope
$ref_id = 1;
grabReferral($rid){
global $ref_id;
$ref_id = $rid;
}
someOtherFunction(){
global $ref_id;
sendValue($ref_id);
}
Феликс
Ответ 2
лично, я бы рекомендовал $GLOBALS
супер переменную.
function foo(){
$GLOBALS['foobar'] = 'foobar';
}
function bar(){
echo $GLOBALS['foobar'];
}
foo();
bar();
DEMO
Ответ 3
Это простой и рабочий код для инициализации глобальной переменной из функции:
function doit()
{
$GLOBALS['val'] = 'bar';
}
doit();
echo $val;
Дает вывод как:
bar
Ответ 4
Следующие работы.
<?php
foo();
bar();
function foo()
{
global $jabberwocky;
$jabberwocky="Jabberwocky<br>";
bar();
}
function bar()
{
global $jabberwocky;
echo $jabberwocky;
}
?>
для создания:
Бармаглот
Бармаглот
Итак, кажется, что переменная, впервые объявленная как глобальная внутри функции и затем инициализированная внутри этой функции, получает глобальную область.
Ответ 5
Ключевое слово global
позволяет получить доступ к глобальной переменной, а не создавать ее. Глобальные переменные - это те, которые создаются в самой внешней области (т.е. Не внутри функции или класса) и недоступны внутри функции, если вы не объявляете их с помощью global
.
Ответ 6
Отказ от ответственности: ни один из этих кодов не был протестирован, но он определенно попадает в точку.
Выберите имя переменной, которую вы хотите получить в глобальной области.
Внутри функции присвойте значение индексу имени массива $GLOBALS.
function my_function(){
//...
$GLOBALS['myGlobalVariable'] = 42; //globalize variable
//...
}
Теперь, когда вы хотите получить доступ к переменной из кода, запущенного в глобальной области видимости, т.е. НЕ внутри функции, вы можете просто использовать $name для доступа к ней, не ссылаясь на массив $GLOBALS.
<?php
//<global scope>
echo $myGlobalVariable; //outputs "42"
//</global scope>
?>
Чтобы получить доступ к своей глобальной переменной из неглобальной области, такой как функция или объект, у вас есть две возможности:
- Доступ к нему через соответствующий индекс массива $GLOBALS. Пример:
$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.
Для обсуждения глобальных переменных см. следующие ресурсы:
Ответ 7
Видимость переменной
Я надеюсь, что это помогло
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>