Page 49 - 4636
P. 49
Далі слідує протилежний приклад. У ньому оголошується змінна за межами функції, а потім
робиться спроба використовувати її всередині функції.
function fn() {
echo "всередині функції \$var = ".$var."<br />";
$var = "значення " 2";
echo "всередині функції, \$var = ".$var."<br />";
}
$var = "значення " 1";
fn () ;
echo "поза функцією \$var = ".$var."<br />";
Цей код згенерує таке виведення:
всередині функції $var =
всередині функції $var = значення 2
поза функцією Svar = значення 1
Функції не виконуються до тих пір, поки вони не будуть викликані, тому першим виконуваним
оператором є $var = "значення " 1";. Він створює змінну $var, що має глобальну область дії і вміст
"значення " 1". Наступний виконуваний оператор - виклик функції fn(). Рядки всередині оператора
виконуються по черзі. Перший рядок у функції звертається до змінної $var. Коли цей рядок
виконується, вона не може бачити створену до цього змінну $var, тому вона створює нову змінну, що
має область дії в рамках функції, і виводить її. У результаті створюється перший рядок виведення.
Наступний рядок всередині функції встановлює вміст змінної $var рівним "значення 2". Оскільки
дії виконуються всередині функції, ця рядок змінює значення локальної змінної $var, а не
глобальною. Другий рядок виводу підтверджує виконання цієї зміни.
На цьому виконання функції завершується, тому виконується заключний рядок сценарію. Цей
оператор echo показує, що значення глобальної змінної не змінилося.
Якщо ви хочете, щоб змінна, створена всередині функції, була глобальною, можна скористатися
ключовим словом global, як показано в наступному прикладі:
function fn() {
global $var;
$var - "значення";
echo "всередині функції \$var = ".$var."<br />";
}
fn() ;
echo "поза функцією \$var = ".$var."<br />";
У цьому прикладі змінна $var була оголошена як глобальна, отже, після виклику функції змінна
буде існувати і поза функцією. Вивід цього сценарію буде мати такий вигляд:
- всередині функції змінна $var = значення;
- поза функцією $var = значення.
Зверніть увагу, що змінна визначена в області дії, що починається з того місця, в якому виконується
рядок global $var;. Функцію можна було б оголосити вище або нижче того місця, в якому вона
викликається. (Також зверніть увагу, що область дії функції істотно відрізняється від області дії
змінної!) Місце оголошення функції фактично не грає ролі - важливо лише те, де функція
викликається і, отже, де виконується міститься всередині неї код.
Ключове слово global можна вказувати також на початку сценарію при першому використанні
змінної, щоб підкреслити, що областю її дії повинен бути весь сценарій. Можливо, це найбільш
поширене використання ключового слова global.
Як видно з наведених вище прикладів, цілком припустимо використовувати ім'я змінної всередині і
поза функції без взаємного впливу один на одного. Загалом випадку робити це не рекомендується,
оскільки, глибоко не вникнувши в код і не зіставивши області дії змінних, користувачі можуть
вирішити, що ці насправді різні змінні є однію і тією змінною.
46