Блог веб разработки статьи | видеообзоры | исходный код

Блог веб разработки статьи | видеообзоры | исходный код

webfanat вконтакте webfanat youtube

Область видимости php

Область видимости php

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

$text = "Привет!";
$a = 5;
$b = 3;

function getTextAndSum(){
    echo $text."<br/>";
    echo $a + $b;
}

getTextAndSum();

Как и предполагалось функция getTextAndSum вернет нам не совсем корректное значение или совсем ничего.

Почему так происходит? Да потому что глобальные переменные $text, $a, $b будут доступны ко всем подключаемым файлам к этому модулю, но в функциях они увы не доступны. Более того в функция они инициализируются как локальные переменные и использовать их можно только там, пример:

$text = "Привет!";
$a = 5;
$b = 3;
function getTextAndSum(){
    $text = "Локальная переменная текст!";
    $a = 10;
    $b = 10;
    echo $text."<br/>";
    echo $a + $b;
}
getTextAndSum();//Вызов функции
/*Вывод глобальных переменных*/
echo "<br/>";
echo $text."<br/>";
echo $a + $b;

Но что если нам необходимо использовать глобальные переменные прямо в функции? Мы можем конечно же сделать так:

$text = "Привет!";
$a = 5;
$b = 3;
function getTextAndSum($text,$a,$b){

    echo $text."<br/>";
    echo $a + $b;
}
getTextAndSum($text,$a,$b);

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

$text = "Привет!";
$a = 5;
$b = 3;
function getTextAndSum(){
    global $text,$a,$b;
    echo $text."<br/>";
    echo $a + $b;
}
getTextAndSum();

Как видите глобальные переменные стали доступны внутри функции. Более того мы можем их изменять:

$text = "Привет!";
$a = 5;
$b = 3;
function getTextAndSum(){
    global $text,$a,$b;
    $text = "Новое значение";
    $a = 1;
    $b = 2;
}
getTextAndSum();
echo $text."<br/>";
echo $a."<br/>";
echo $b."<br/>";

Мы также можем работать с глобальными переменными в функции через глобальный массив $GLOBALS.

$text = "Привет!";
$a = 5;
$b = 3;
function getTextAndSum(){
 echo $GLOBALS['text']."<br/>";
    echo  $GLOBALS['a'] +  $GLOBALS['b'];
}
getTextAndSum();

В массиве $GLOBALS содержаться все глобальные переменные данного контекста. С этим мы более или менее разобрались теперь рассмотрим работу с статическими переменными.

function staticPer(){
    static $a = 1;
    echo $a;
    $a++;
}

staticPer();
echo "<br/>";
staticPer();
echo "<br/>";
staticPer();

Что мы здесь видим. Функция staticPer вызывается у нас три раза причем при каждом новом вызове ее переменная увеличивается. Дадим краткое определение статическим переменным: Статическая переменная существует только в локальной области видимости функции, но не теряет своего значения, когда выполнение программы выходит из этой области видимости.

Рассмотрим пример с рекурсивным вызовом функции:

function staticPer(){
    static $a = 1;
    echo $a++."<br/>";
    if((int)$a <= 10){
        staticPer();
    }
}
staticPer();

мы получили что на подобии цикла вывели числа от 1 до 10.Только не забудьте про условие выхода , иначе произойдет зацикливание.

Вот в принципе и все что я хотел вам рассказать про область видимости переменных. В дополнение к этой статье отлично подойдет Пространство имен в php.

На этом дорогие друзья все, надеюсь данная статья была для вас содержательной и интересной.

Я желаю вам удачи и успеха!

Оцените статью:

Статьи

Комментарии

Внимание!!! Комментарий теперь перед публикацией проходит модерацию

Все комментарии отправлены на модерацию

Реклама

Запись экрана

Данное расширение позволяет записывать экран и выводит видео в формате webm