Всем привет и рассмотрим следующий код:
$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.
На этом дорогие друзья все, надеюсь данная статья была для вас содержательной и интересной.
Я желаю вам удачи и успеха!