глобальные переменные из одной функции в другую - PullRequest
0 голосов
/ 15 ноября 2011

Допустим, у меня есть это:

function myFunc()
{
    global $distinct_variable;

    die ($distinct_variable);
}

function anotherFunc()
{
    $distinct_variable = 'Hello World';

    myFunc();
}

anotherFunc();

Для того, чтобы anotherFunc () правильно отображал «Hello World», он должен быть написан так

{
    global $distinct_variable;

    $distinct_variable = 'Hello World';

    myFunc();
}

Теперь он покажетсообщение, но почему я должен глобальный $ Different_variable;в anotherFunc (), поскольку он является глобальным в myFunc (), который находится внутри anotherFunc ()

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

Может кто-нибудь объяснить, почему это не работает?Спасибо.

Спасибо за ваши ответы, я понял сейчас:)

Ответы [ 3 ]

3 голосов
/ 15 ноября 2011
Переменная

A global именно такова - она ​​существует ТОЛЬКО в ГЛОБАЛЬНОЙ области.

Все в PHP (кроме суперглобальных) существует только в одной области - будь то глобальная область или область видимостифункция / метод.Scope не работает каскадно - поэтому только то, что у вас есть переменная во «внешней» функции, не делает ее доступной «внутренней» функции.

Аналогично, global извлекает переменные, определенные только в области видимости GLOBAL(самая верхняя область), а не просто «область выше этой, из которой меня называли».Это то, что вы пытались сделать, но это абсолютно не сработает.Этот уровень более тонкого контроля предназначен для аргументов функции / возвращаемых значений.

2 голосов
/ 15 ноября 2011

Каждая функция имеет свою собственную таблицу символов. Существует также глобальная таблица символов. Тот факт, что одна функция вызывается из другой, не означает, что переменные, объявленные глобальными в одной, являются глобальными в другой или наследуются от другой. Они по-прежнему ссылаются на переменную в «локальной» таблице символов по умолчанию.

1 голос
/ 15 ноября 2011

Doing global $somevar; echo $somevar сводится к echo $GLOBALS['somevar'];. Этот суперглобальный $ GLOBALS не включает переменные, которые были определены внутри функции: только действительно «глобальные» переменные, которые существуют на верхнем уровне скрипта.

...