Область видимости переменной

Последнее обновление: 11.03.2021

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

Переменные в блоках цикла и условных конструкций

Блоки циклов и условных конструкций не образуют отдельной области видимости, и переменные, определенные в этих блоках, мы можем использовать вне этих блоков:

$condition = true;
if($condition){
	
	$name = "Tom";
}
echo $name;	// Tom

или

$i = 6;
switch($i){
	
	case 5: $name = "Tom"; break;
	case 6: $name = "Bob"; break;
	default: $name = "Sam"; break;
}
echo $name;	// Bob

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

Локальные переменные создаются внутри функции. К таким переменным можно обратиться только изнутри данной функции. Например:

<?php
function showName(){
	$name = "Tom";
	echo $name;
}

showName();
echo $name;	// так написать нельзя, так как 
			// переменная $name существует
			// только внутри функции showName(
?>

В данном случае в функции showName() определена локальная переменная $name. Соответственно обратиться в этой переменной мы можем только внутри функции showName(), но не вне ее.

То же самое относится и к параметрам функции: вне функции ее параметры также не существуют.

Статические переменные

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

<?php
function getCounter()
{
	static $counter = 0;
	$counter++;
	echo $counter;
}
getCounter(); // counter=1
getCounter(); // counter=2
getCounter(); // counter=3
?>

Чтобы указать, что переменная будет статической, к ней добавляется ключевое слово static. При трех последовательных вызовах функции getCounter() переменная $counter будет увеличиваться на единицу.

Если бы переменная $counter была обычной нестатической, то при каждом вызове функция getCounter() выводила бы 1.

Как правило, статические переменные служат для создания различных счетчиков, как в примере выше.

Глобальные переменные

Глобальные переменные по умолчанию не доступны внутри функции. Например:

<?php
$name = "Tom";
function hello()
{
    echo "Hello " . $name;
}
hello();
?>

Данный код не будет работать, а интрепретатор PHP известит нас, что переменная $name не определена.

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

<?php
$name = "Tom";
function hello()
{
	global $name;
    echo "Hello " . $name;
}
hello();	// Hello Tom
?>

Для получения доступа к глобальной переменной в функции с помощью оператора global объявляется переменная с тем же именем:

global $name;

После этого к глобальной переменной $name можно будет обращаться внутри функции. При чем мы можем не только получать ее значение, но и изменить его:

<?php
$name = "Tom";
function changeName()
{
	global $name;
    $name = "Tomas";
}
changeName();	
echo $name; // Tomas
?>

В качестве альтернативы оператору global для обащения к глобальным переменным мы можем использовать встроенный массив $GLOBALS:

<?php
$name = "Tom";
function changeName()
{
	$username = $GLOBALS["name"];
	echo "Старое имя: $username <br>";
	// изменяем значение переменной $name
    $GLOBALS["name"] = "Tomas";
}
changeName();	
echo "Новое имя: " . $name;
?>

Чтобы обратиться к глобальной переменной $name, применяется выражение $GLOBALS["name"] - в квадратные скобки передается название переменной (без знака $). Результат работы скрипта:

Старое имя: Tom
Новое имя: Tomas
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850