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

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

Розуміння областей видимості

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

Насправді, працюючи з функціями, твердження, наведене вище, не зовсім вірно. Функції мають свою область видимості змінних. Наприклад, дві змінні з ім'ям «$ test», певні в тілі функції і поза нею, є різними і існують окремо один від одного. PHP при виконанні функції створює для неї «окремий простір». Як тільки її виконання завершиться, це простір обнуляється і безслідно зникає.

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

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

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

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

Іноді існує потреба дати функції доступ до змінної, що лежить в глобальному контексті, без передачі її у вигляді параметра. PHP реалізує таку можливість за допомогою ключового слова global. Щоб «затягнути» глобальні змінні в функцію, необхідно всередині неї вказати ключове слово global та імена змінних через кому.

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

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

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

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

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

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

Для визначення змінної як статичної, перед її ім'ям необхідно вказати ключове слово static. Як і до локальних змінних, до них неможливо отримати доступ ззовні. Статичні змінні дають простір для фантазії. Ви можете організувати лічильник викликів функції, як в прикладі, зазначеному нижче.

Вас може збентежити, що в статичної змінної $ count. спочатку кожного виконання присвоюється значення «0», а потім до нього додається одиниця. Адже при такій реалізації функція завжди повинна повертати одиницю. Справа в тому, що стартове значення статичної змінної задається всього один раз, при визначенні функції, а не при виклику. Просто уявіть, що при викликах ця строчка відсутня зовсім.

Поділіться в соцcетях: