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

У меня есть два файла 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.

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