Локальные и глобальные переменные

Давайте рассмотрим следующий пример

$a = 5;
function func() {
    $a=7;
    return $a;
}

func();
echo $a; // Что тут выводится?

На самом деле выведется 5, так $a за пределами функции является глобальной переменной, а внутри функции $a мы имеем дело уже с локальной переменной. Т.е. по сути это две разных переменных, с разными областями памяти.

Несколько моментов связанных с локальными переменными

  1. Локальные переменные не видны за пределами своих функций.

  2. После завершения функции локальные переменные удаляются(исключение мы увидим позже)

  3. Параметры функции, являются локальными переменными. При вызове функции данные из глобальных переменных копируются в локальные. Например:

$glob=7;

function func($loc) {
    echo $loc;
    return $loc;
}

func($glob); // при вызове данные из $glob скопируются в $loc

Ключевое слово global

По умолчанию глобальные переменные не видны внутри функций, но есть ключевое слово global, которое позволяет это изменить

<?php
$a=1;
$b=2;

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

    $b = $a + $b;
}

Sum();
echo $b;
?>

Нельзя правда сказать, что это хороший подход. Почему?

  1. Работа Вашей функции зависит от состояния внешних переменных - это усложняет тестирование, при изменении внешнего кода Ваша функция может перестать работать

  2. Запуск Вашей функции меняет внешние переменные. Представьте захотите ли Вы пользоваться чужой функцией, если будете знать, что она меняет Ваши переменные?

Практика:

  1. Сделать функцию, которая проверяет, является ли число простым
  2. Функция, которая считает расстояние между двумя точками

results matching ""

    No results matching ""