Php7 - PHP: global всередині функції не показує змінну - Stack Overflow російською. Область видимості змінних PHP. Все, що ви хотіли знати, але боялися запитати Вивести global змінну php за межами функції

Останнє оновлення: 1.11.2015

При використанні змінних та функцій слід враховувати області видимості змінних. Область видимості визначає область дії, доступності даної змінної.

Локальні змінні

Локальні змінні створюються усередині функції. До таких змінних можна звернутися лише зсередини цієї функції. Наприклад:

У разі функції get() визначено локальна змінна $result . І із загального контексту ми не можемо до неї звернутися, тобто написати $a = $result; не можна, оскільки область дії змінної $result обмежена функцією get(). Поза цією функцією змінної $result немає.

Те саме стосується і параметрів функції: поза функцією параметри $lowlimit і $highlimit також не існують.

Як правило, локальні змінні зберігають якісь проміжні результати обчислень, як і вище.

Статичні змінні

На локальні змінні схожі статичні. Вони відрізняються тим, що після завершення роботи функції їхнє значення зберігається. Під час кожного нового виклику функція використовує раніше збережене значення. Наприклад:

Щоб вказати, що змінна буде статичною, до неї додається ключове слово . При трьох послідовних викликах функції getCounter() змінна $counter збільшуватиметься на одиницю.

Якби змінна $counter була звичайною нестатичною, при кожному виклику функція getCounter() виводила б 1.

Як правило, статичні змінні служать до створення різних лічильників, як у прикладі вище.

Глобальні змінні

Іноді потрібно, щоб змінна була доступна скрізь, глобально. Подібні змінні можуть зберігати якісь загальні для всієї програми дані. Для визначення глобальних змінних використовується ключове слово :1

"; ) getGlobal(); echo $gvar; ?>

Після виклику функції getGlobal() до змінної $gvar можна буде звернутися з будь-якої частини програми.

Нотатка:активовано адаптивну версію сайту, яка автоматично підлаштовується під невеликий розмір Вашого браузера та приховує деякі деталі сайту для зручності читання. Приємного перегляду!

Привіт шановні читачі блогу Site on! Ми дізналися що є функція в PHP, навчилися створювати власні функції, передавати в них аргументи і викликати їх для виконання. Продовжуючи тему функцій у PHP, необхідно підкреслити наступні речі:

  • Всередині функції можна використовувати будь-який PHP код (цикли, умови, будь-які операції), включаючи інші функції (як інтегровані, так і власні);
  • Ім'я функції має починатися з латинської літери, або символу підкреслення, далі може йти будь-яка кількість латинських букв, цифр або символів підкреслення;
  • Всі функції мають глобальну область видимості, це означає, що будь-яка функція може бути викликана будь-де, навіть якщо ця функція визначена всередині іншої;
  • PHP не підтримує перевантаження функцій, також немає можливості перевизначити (змінити, доповнити) або видалити створену функцію;
  • Функції мають бути визначено до використання. Тобто якщо ви спочатку викличте функцію, а тільки потім – нижче за кодом її опишіть, це не вплине на працездатність і не викличе помилок.

Функції, що залежать від умов

Ми можемо створювати (визначати, описувати) функцію залежно від умови. Наприклад:

//викликали функцію sayHi, її можна викликати в будь-якому місці /*тут не можна викликати функцію sayGoodbye, тому що ми ще не перевірили умову і не зайшли всередину конструкції if*/ if($apply)( function sayGoodbye()( echo "Усім поки!"
"; } } /*ось тепер можемо викликати sayGoodbye*/
"; }

Результат:

І погляньте на цей приклад:

/*а ось що буде, якщо викликати sayGoodbye тут*/ sayGoodbye(); if($apply)( function sayGoodbye()( echo "Усім поки!"
"; ) ) function sayHi()( echo "Всім привіт!
"; }

Результат:

Насправді скільки я працюю, жодного разу ніде такого не зустрічав, але мати на увазі потрібно всі можливості мови.

Вкладені функції

Вкладена функція – це функція, оголошена всередині іншої функції. Приклад:

/*Тут не можна викликати sayGoodbye, оскільки вона з'явиться тільки після виклику функції sayHi*/ sayHi(); /*викликали функцію sayHi, її можна викликати в будь-якому місці*/ /*Тепер можемо викликати sayGoodbye*/ sayGoodbye(); function sayHi()( echo "Всім привіт!"
"; function sayGoodbye()( echo "Усім поки що!
"; } }

Знову ж таки, при першому обході інтерпретатор PHP позначає собі, що він знайшов опис функції sayHi, але не заходить усередину її тіла, він бачить тільки назву, а якщо інтерпретатор не заходить усередину тіла sayHi, то він гадки не має, що всередині ми визначаємо ще одну функцію – sayGoodbye.

Далі код починає виконуватися, ми викликаємо sayHi, інтерпретатор PHP доводиться зайти в тіло функції sayHi, щоб виконати її і там він випадково знаходить опис ще однієї функції - sayGoodbye, після чого і sayGoodbye можна викликати в будь-якому місці, скільки завгодно разів.

Але варто звернути увагу на дуже тонкий момент у ситуації вище: функція sayHi стає одноразовою, тому що якщо ми ще раз її викличемо, то PHP знову натрапить на визначення функції sayGoodbye, а в PHP так робити не можна – не можна перевизначати функції. Про це та про те, як з цим боротися я писав у попередній статті.

У PHP описані вище прийоми застосовуються дуже рідко, частіше їх можна побачити, наприклад, JavaScript.

Область видимості змінних

У PHP рівно дві області видимості: глобальнаі локальна. У кожній мові програмування області видимості влаштовані по-різному. Наприклад, у C++ навіть у циклах своя (локальна) область видимості. У PHP, до речі, це глобальна область видимості. Але сьогодні ми говоримо про функції.

У функцій PHP своя, внутрішня область видимості (локальна), тобто всі змінні всередині функції видно тільки всередині цієї функції.

Отже, ще раз: усе, що поза функціями – це світова область видимості, усе, що всередині функцій – локальна область видимості. Приклад:

Шановні знавці, увага, питання! Що виведе остання інструкція echo $name; ?

Як ви самі бачили, у нас було 2 змінні $name, одна всередині функції (локальна область видимості), інша просто в коді (глобальна область видимості), останнє присвоєння змінної $nameбуло $name = "Рудь Сергій";Але оскільки це було всередині функції, то воно й залишилося. У глобальній області видимості останнім присвоєнням було $name = "Андрій";що ми, власне, і бачимо в результаті.

Тобто дві однакові змінні, але в різних сферах видимості ніяк не перетинаються і не впливають один на одного.

Давайте я проілюструю область видимості на малюнку:

При першому обході інтерпретатор швидко переглядає світову область видимості, запам'ятовує які є змінні і функції, але не виконує код.

Звернення до глобальних змінних з локальної області видимості

Але якщо нам все-таки потрібно з функції звернутися до тієї самої змінної $name з глобальної області видимості, та не просто звернутися, а змінити її? Для цього є 3 основні варіанти. Перше використання ключового слова global:

"; global $name; /*починаючи з цього моменту ми маємо на увазі глобальну змінну $name*/$name = "Рудь Сергій"; ) $ name = "Андрій"; sayHi($name); echo $name; //?

Результат:

Але цей спосіб має мінус, відколи ми звернулися до глобальної змінної $nameми втратили (переписали) локальну змінну $name.

Другий спосібполягає в тому, щоб використовувати суперглобальний масив PHP. Цей масив PHP сам, автоматично поміщає кожну змінну, яку ми створили в глобальній області видимості. Приклад:

$name = "Андрій"; // Теж саме що і$GLOBALS["name"] = "Андрій";

Отже:

$GLOBALS["name"] = "Рудь Сергій"; ) $name = "Андрій"; sayHi($name); echo $name; // ?

Результат той самий, що і під час використання ключового слова global:

Тільки цього разу ми не переписали локальну змінну, тобто змінну $nameвсередині функції залишилася колишньою і дорівнює "Андрій", а не "Рудь Сергій".

Передача аргументів за посиланням

Третій спосіб- Це передача адреси ( посилання) змінної, а чи не її значення. Посилання PHP не дуже вдалися, на відміну від інших мов програмування. Тим не менш, я розповім вам єдиний правильний варіант передачі аргументу за посиланням на функцію, який нормально підтримується в PHP 5.3 і вище. Є й інші способи роботи з посиланнями, але вони працювали в PHP 5.2 і нижче, у результаті самі розробники PHP вирішили від них відмовитись, тому не будемо про них.

Так ось, ПРАВИЛЬНА передача аргументу за посиланням у PHP 5.3 і вище здійснюється так:

Function sayHi(& $name)(

Ми в самому описі функції додали амперсанд (&) – цей значок означає, що ми приймаємо не значення змінної, а посилання (адресу) на це значення в пам'яті. Посилання в PHP дозволяють створити дві змінні, що вказують на те саме значення. Це означає, що при зміні однієї з цих змінних змінюються обидві, тому що в пам'яті вони звертаються до одного і того ж значення.

І в результаті маємо:

//Приймаємо не значення, а посилання значення echo "Привіт, ".$name."!
$name = "Рудь Сергій"; ) $name = "Андрій"; sayHi($name); echo $name; // ?

Результат:

Статичні змінні

Уявіть собі таку ситуацію: нам потрібно порахувати скільки разів ми привіталися. Ось що ми намагаємося зробити:

$c++; // збільшуємо лічильник на 1


Результат:

Змінна $cне запам'ятовує свого значення, вона щоразу створюється наново. Нам потрібно зробити так, щоб наша локальна змінна $cзапам'ятовувала своє значення після виконання функції, для цього використовують ключове слово static:

// лічильник, зробили статичним echo "Привіт, ".$name."!
$c++; // збільшуємо лічильник на 1 echo "Всього привіталися". $c. раз.


"; ) sayHi("Рудь Сергій"); sayHi("Андрій"); sayHi("Дмитро");

Результат:

Повернення значень

У функціях є така зручна річ як повернення значень. Це коли функція замість того, щоб вивести щось на екран, поміщає все змінну і віддає цю змінну нам. А ми вже далі вирішуємо, що з нею робити. Наприклад візьмемо цю функцію, вона зводить число квадрат:

Результат:

Зробимо так, щоб замість виведення на екран вона повертала результат виконання. Для цього використовується ключове слово return:

Результат:

Тепер ми можемо використовувати це різними способами:

//виводить результат echo "
$num = getSquare(5); echo $num;

Результат:

Звертаю вашу увагу на те, що ключове слово returnне просто повертає значення, а повністю перериває роботу функції, тобто весь код, який знаходиться нижче за ключове слово returnніколи не справдитися. Іншими словами, return для функцій також працює як breakдля циклів:

echo "До мене PHP ніколи не дійде:(";) echo getSquare (5); //виводить результат echo "
$num = getSquare(5); // надали результат у змінну echo $num; // Вивели змінну на екран

Результат:

Тобто return– це ще й вихід із функції. Його можна використовувати і без значення, що повертається, тільки заради виходу.

Рекурсивна функція

Рекурсивна функція – це функція, що викликає себе. Рекурсія використовується не часто і вважається ресурсомісткою (повільною) операцією. Але буває, що використання рекурсії найочевидніший і найпростіший варіант. Приклад:

"; if($number< 20){ // щоб рекурсія стала нескінченною countPlease(++$number); // Функція countPlease викликала сама себе) ) countPlease(1);

Результат:

Якщо ви знаєте, як обійтися без рекурсії, краще так і зробити.

Сувора типізація в PHP (уточнення типу)

У PHP зроблено дрібні кроки до суворої типізації, завдяки цьому ми можемо заздалегідь вказати, який тип має приймати функція (це називається type-hint):

Результат:

Catchable fatal error: Argument 1 passed to countPlease() мусить бути array, integer given, називається /home/index.php on line 7 і defined in /home/index.php on line 3

Помилка нам каже, що функція очікує прийняти масив, а натомість ми їй передаємо число. На жаль, поки що ми можемо уточнювати тип тільки (array), а з PHP 5.4 ще додався такий варіант як callable:

Callableперевіряє, чи передане значення може бути викликане як функція. Callable може бути як ім'ям функції, заданим рядковою змінною, так і об'єктом і ім'ям методу, що викликається. Але про об'єкти та методи ми поговоримо пізніше (це розділ об'єктно-орієнтованого програмування), а з функціями ви вже знайомі. Результат роботи я вам показати не можу, тому що у мене зараз стоїть PHP 5.3, але він був би:

Викликали функцію getEcho

Використання аргументів змінної довжини

І наостанок ще один нюанс, що дуже рідко використовується. Уявіть ситуацію, ми передаємо в функцію аргументи, хоча функції ми їх не описали, наприклад:

Результат:

Як бачите, помилок немає, але наші передані аргументи ніде не використовуються. Але це не означає, що вони зникли – вони все одно передалися у функцію і ми можемо їх використовувати, для цього існують вбудовані функції PHP:

func_num_args()- Повертає кількість аргументів, переданих функції
func_get_arg (порядковий номер)- Повертає елемент зі списку аргументів
func_get_args()- Повертає масив, що містить аргументи функції

"; echo func_get_arg(0) ; ) $age = 22; getEcho("Рудь Сергій", $age);

Результат:

Висновок

Сьогоднішня стаття є заключною за темою функцій PHP. Тепер ви можете бути впевнені у повноті своїх знань щодо цієї теми та можете сміливо використовувати функції для своїх потреб.

Якщо у когось є бажання набити руку, але немає ідей як це зробити – найкращим способом буде написання вже готових (вбудованих) функцій PHP, наприклад, можна написати власну функцію count() чи будь-яку іншу.

Дякую всім за увагу і до нових зустрічей! Якщо щось не зрозуміло, сміливо ставте ваші запитання у коментарях!

У цьому уроці розглядається область видимості змінних PHP. Пояснюється відмінність локальної та глобальної області видимості, показується як отримати доступ до глобальних змінних усередині функції, як працювати з суперглобалами та створювати статичні змінні.

Коли приступаєш до вивчення PHP і починаєш працювати з функціями та об'єктами, область видимості змінних викликає деяке збентеження. На щастя, правила PHP у цьому відношенні дуже прості для розуміння (порівняно з іншими мовами програмування).

Що таке область видимості?

Область видимості змінних - це контекст, у якого змінну було визначено і де до неї можна отримати доступ. У PHP є дві області видимості змінних:

  • Глобальна- до змінних можна отримати доступ у будь-якому місці скрипту
  • Локальна- До змінних можна отримати доступ тільки всередині функції, в якій вони були визначені

Область видимості змінної, а особливо локальна, істотно полегшує управління кодом. Якби всі змінні були глобальними, їх можна було б змінювати в будь-якому місці скрипту. Це призвело б до хаосу та великих скриптів, оскільки дуже часто різні частини скрипту використовують змінні з однаковими іменами. Обмежуючи область видимості локальним контекстом, ви визначаєте межі коду, який може отримати доступ до змінної, що робить код більш стійким, модульним і простим у налагодженні.

Змінні з глобальною областю видимості називаються глобальними, і з локальної областю видимості - локальними.

Ось приклад того, як працюють глобальні та локальні змінні.

"; ) sayHello(); echo "Значення \$globalName: "$globalName"
"; echo "Значення \$localName: "$localName"
"; ?>

Привіт Гаррі! Значення $globalName: "Зоя" Значення $localName: ""

У цьому скрипті ми створили дві змінні:

  • $globalName- це глобальназмінна
  • $localName- це локальназмінна, яка створена всередині функції sayHello().

Після створення змінної та функції скрипт викликає sayHello(), який виводить "Привіт, Гаррі!" . Потім скрипт намагається вивести значення двох змінних за допомогою функції echo. Ось що відбувається:

  • Так як $globalNameбула створена поза функцією, вона доступна в будь-якому місці скрипта, тому виводиться "Зоя".
  • $localNameбуде доступною лише всередині функції sayHello() . Так як вираз echo знаходиться поза функцією, PHP не дає доступу до локальної змінної. Натомість PHP передбачає, що код буде створювати нову змінну з ім'ям $localName , яка отримає значення за умовчанням - порожній рядок. ось чому другий виклик echo виводить значення "" для змінної $ localName .

Доступ до глобальних змінних усередині функції

Для отримання доступу до глобальної змінної поза функцієюдосить просто написати її ім'я. Але для отримання доступу до глобальної змінної всередині функції, потрібно спочатку оголосити змінну як глобальну функції за допомогою ключового слова global:

Function myFunction() ( global $globalVariable; // Доступ до глобальної змінної $globalVariable )

Якщо не зробити цього, то PHP передбачає, що ви створюєте або використовуєте локальну змінну.

Ось приклад скрипта, який використовує глобальну змінну всередині функції:

"; global $globalName; echo "Привіт, $globalName!
"; ) sayHello(); ?>

При виконанні скрипт виведе:

Привіт Гаррі! Привіт Зоя!

Функція sayHello() використовує ключове слово global для оголошення змінної $globalName як глобальної. Після чого вона може отримати доступ до змінної та вивести її значення ("Зоя").

Що таке суперглобали?

PHP має спеціальний набір зумовлених глобальних масивів, що містять різноманітну інформацію. Такі масиви називаються суперглобалів,тому що вони доступні з будь-якого місця скрипта, включаючи внутрішній простір функцій, і їх не потрібно визначати за допомогою ключового слова global .

Ось список суперглобалів, доступних у PHP версії 5.3:

  • $GLOBALS - список усіх глобальних змінних у скрипті (за винятком суперглобалів)
  • $_GET - містить перелік всіх полів форми, надісланої браузером за допомогою запиту GET
  • $_POST - містить список усіх полів форми надісланої браузером за допомогою запиту POST
  • $_COOKIE - містить список всіх куки, надісланих браузером
  • $_REQUEST - містить всі поєднання ключ/значення, що містяться в масивах $_GET, $_POST, $_COOKIE
  • $_FILES - містить список всіх файлів, завантажених браузером
  • $_SESSION - дозволяє зберігати та використовувати змінні сесії для поточного браузера
  • $_SERVER - містить інформацію про сервер, таку як ім'я файлу виконуваного скрипта та IP адресу браузера.
  • $_ENV - містить перелік змінних середовища, що передаються PHP, наприклад, CGI змінні.
Наприклад, можна використовувати $_GET для того, щоб отримати значення змінних ув'язнених у рядку URL-адреси запиту скрипта, і вивести їх на сторінці:

Якщо ви запустите наведений вище скрипт за допомогою рядка URL http://www.example.com/script.php?yourName=Фред, то він виведе:

Привіт, Фреде!

Попередження!У реальному скрипті ніколи не можна використовувати подібну передачу даних через слабку безпеку. Потрібно завжди здійснювати перевірку чи фільтрацію даних.

Суперглобал $GLOBALS дуже зручно використовувати, тому що він дає можливість організувати доступ до глобальних змінних до функцій без необхідності використання ключового слова global . Наприклад:

"; ) sayHello(); // Виводить "Привіт, Зоя!" ?>

Статичні змінні: вони знаходяться десь поруч

Коли ви створюєте локальну змінну всередині функції, вона існує тільки доки працює функція. Після завершення функції локальна змінна зникає. Коли функція знову з'являється, створюється нова локальна змінна.

Найчастіше це добре працює. Таким чином, функції самодостатні і працюють завжди однаково при кожному виклику.

Однак є ситуації, коли було б зручно створити локальну змінну, яка "пам'ятає" своє значення між викликами функції. Така змінна називається статичною.

Для створення статичної змінної функції необхідно використовувати ключове слово static перед ім'ям змінної і обов'язково задати їй початкове значення. Наприклад:

Function myFunction() ( static $myVariable = 0; )

Розглянемо ситуацію, коли зручно використати статичну змінну. Допустимо, ви створюєте функцію, яка при викликі створює віджет і виводить кількість вже створених віджетів. Можна спробувати написати такий код із використанням локальної змінної:


"; echo createWidget() . " ми вже створили.
"; echo createWidget() . " ми вже створили.>
"; ?>

Але, оскільки змінна $numWidgets створюється щоразу під час виклику функції, ми отримаємо наступний результат:

Створюємо деякі віджети ... 1 ми вже створили. 1 ми вже створили. 1 ми вже створили.

Але з використанням статичної змінної ми зможемо зберігати значення від одного виклику функції до іншого:

"; echo createWidget() . " ми вже створили.
"; echo createWidget() . " ми вже створили.
"; echo createWidget() . " >ми вже створили.
"; ?>

Тепер скрипт видасть очікуваний результат:

Створюємо деякі віджети ... 1 ми вже створили. 2 ми вже створили. 3 ми вже створили.

Хоча статична змінна зберігає значення між викликами функції, вона діє лише у момент виконання скрипта. Як тільки скрипт завершує своє виконання, всі статичні змінні знищуються, як і локальні і глобальні змінні.

От і все! Найчастіше звертайтеся до документації з PHP.

Тут слід зазначити, що представлений вами елемент коду слід розглядати як поганий стиль проектування та програмування, оскільки він розглядає файл, що підключається як моментально виконуваний набір операцій.

Найбільш правильний підхід полягав у тому, щоб помістити набір операцій у вигляді функцій/класу з власним ім'ям у файл, підключити файл (без будь-якого оператора повернення за межами функцій), а потім викликати функцію явноз потрібним набором аргументів.

То в чому проблема?

Все дуже просто, ви робите includeвсередині методу метод, а значить змінні вказані в файлі, що підключається, ініціалізуються в області видимості методу метод. Отже, змінна $langне є глобальною, а обмежена видимістю методу, а ви звертаєтесь до глобальної змінної, тому при використанні модифікатора globalвона дорівнюватиме null.

Якщо робити include у глобальній області видимості, тоді змінна lang стане загальнодоступною (global) та її використання стане можливим. Це легко перевірити, достатньо в файлі, що підключається перед початком визначення будь-якої змінної написати global $змінна.

Приклад:

include "file1.php"; function include2() ( include "file2.php"; )
  • file1.php визначено у глобальній області видимості.
  • file2.php визначений у локальній області видимості функції include2.

Підхід з глобальними змінними і таким include - це милиця, яка принесе вам проблеми в майбутньому. Функції повинні бути визначені явно, мати унікальне ім'я та виконуватись на вимогу.

А чому підхід із глобальними змінними поганий?

Справа в тому, що глобальні змінні видимі звідусіль, глобально. Це зручно: адже немає жодних обмежувачів. З іншого боку, стає неможливо відстежити, хто змінює дані. Неконтрольовані зміни - це перше, що зазвичай спадає на думку на питання про те, чим же погані глобальні змінні.

Припустимо, у вас є функція, результат якої залежить від глобальної змінної. Ви викликаєте її, викликаєте – але через 10 хвилин функція починає повертати невірні результати. Що трапилося? Адже на вхід ви передаєте їй той самий набір параметрів? Гм, хтось змінив значення глобальної змінної... Хто це міг бути? Та хто завгодно - адже глобальна змінна доступна всім.

Найкращий рецепт при проектуванні підпрограм: зробити так, щоб результат вашої функції залежав би лише від аргументів. Це ідеал, якого потрібно прагнути.

Не використовуйте глобальні змінні у проекті без необхідності, користуйтеся всіма можливостями локальної області видимості, передачі параметрів у аргументи функції та код буде легше писати, підтримувати та тестувати.

Знаєте, який найкращий префікс для глобальних змінних?

Змінні, визначені всередині підпрограми (функції користувача). Вони доступні лише всередині функції, де вони визначені.

Для PHP всі оголошені та використовуються у функції змінні за промовчанням локальні для функції. Тобто, за умовчанням немає можливості змінити значення глобальної змінної функції в тілі.

Якщо ви в тілі функції користувача будете використовувати змінну з ім'ям, ідентичним імені глобальної змінної (що знаходиться поза користувальницькою функцією), то ніякого до відношення глобальної змінної ця локальна змінна не матиме. У цій ситуації в функції користувача буде створена локальна змінна з ім'ям, ідентичним імені глобальної змінної, але доступна дана локальна змінна буде тільки всередині цієї функції користувача.

Пояснимо цей факт на конкретному прикладі:

$a = 100;

function funct () (
$a = 70;
echo "

$a

" ;
}
funct();
echo "

$a

" ;
?>

Сценарій виведе спочатку 70, а потім 100:

70
100

Для позбавлення від наведеного недоліку, у PHP існує спеціальна інструкція global, що дозволяє користувальницької функції працювати з глобальними змінними. Розглянемо цей принцип на конкретних прикладах:

$a = 1;
$ b = 2;

Function Sum ()
{
global $a, $b;

$b = $a + $b;
}

Sum();
echo $b;
?>

Наведений вище скрипт виведе " 3 ". Після визначення $aі $bвсередині функції як globalвсі посилання на будь-яку з цих змінних будуть вказувати на їхню глобальну версію. Не існує жодних обмежень на кількість глобальних змінних, які можуть оброблятися функціями користувача.

Другий спосіб доступу до змінних глобальної області видимості - використання спеціального, що визначається PHP масиву $GLOBALS. Попередній приклад може бути переписаний так:

Використання $GLOBALS замість global:

$a = 1;
$ b = 2;

Function Sum ()
{
$GLOBALS [ "b" ] = $GLOBALS [ "a" ] + $GLOBALS [ "b" ];
}

Sum();
echo $b;
?>

$GLOBALS- це асоціативний масив, ключем якого є ім'я, а значенням – вміст глобальної змінної. Зверніть увагу, що $GLOBALS існує у будь-якій області видимості, це пояснюється тим, що цей масив є. Нижче наведено приклад, що демонструє можливості суперглобальних змінних:

function test_global()
{
// Більшість зумовлених змінних не є
// "супер" і щоб бути доступними в локальній області
// Видимості функції вимагають вказівки "global".
global $HTTP_POST_VARS ;

Echo $HTTP_POST_VARS ["name"];

// Суперглобальні змінні доступні у будь-якій області
// видимості і вимагають вказівки " global " .
// Суперглобальні змінні доступні, починаючи з PHP 4.1.0
echo $_POST ["name"];
}
?>