html.okpython.net
HTML и CSS для начинающих

PHP :: Переменные

Объявление переменных в PHP

Переменные в PHP, как и в других языках программирования, применяются для хранения и обработки различных типов данных и являются именованными контейнерами для их размещения. В случае необходимости хранимые данные могут быть получены по имени и далее использованы, заменены другими данными или вообще удалены. Объявлять переменные в PHP перед использованием не нужно, они могут быть инициализированы (т.е. им может быть присвоено начальное значение) сразу же после создания.

Для обозначения переменных используется знак доллара $, после которого записывается непосредственно имя переменной. Как и другие идентификаторы PHP имя переменной является регистрозависимым, должно начинаться со знака подчеркивания или буквы латинского алфавита и может состоять только из букв латинского алфавита, цифр и знаков подчеркивания. Использование переменных показано в коде примера №1.

PHP Результат htmlCodes
//Присвоили переменной начальное значение
$apples=0; 

/* Оператор echo выводит перечисляемые через запятую 
переменные в код html-документа, но перед выводом преобразует 
их в строки, подробнее об этом позже*/

echo "Пока что у нас имеется ", $apples, " яблок.<br>";

//Присвоим переменной новое значение
$apples=5; 

echo "После встряски дерева яблок стало ", $apples, ".<br>";

/* Изменим значение переменной прибавив еще пять яблок.
Для этого к прежнему значению прибавим число 5, теперь 
$apples==10 (равно) */
$apples=$apples+5; 
//$Apples и $apples разные переменные
$Apples=3; 

echo "От ветра упало еще 5 яблок и теперь их стало ", 
	 $apples, ".<br>", "Из них ", $Apples, " яблока оказались червивыми.<br>";

Пример №1. Переменные в PHP

Обратите внимание на то, что в программировании знак равно = означает не равенство двух величин, а присваивание, например, значения переменной. Если же нужно указать на равенство двух значений, то используется комбинация символов ==.

Оператор echo служит для вывода одной или нескольких строк. Разрешается выводить и другие типы данных, например, числа, но они, как и другие типы данных, перед выводом все равно преобразуются в строки (о типах данных и преобразовании одних типов данных в другие мы поговорим в соответствующем разделе). При этом, если блок php-кода вставлен, например, в html-документ, то выводимый оператором echo текст будет вставлен в html-код, в то время как сам php-код перед отправкой страницы будет из нее удален. Подробнее данный оператор будет рассмотрен во второй части учебника.

Не забываем о необходимости набора кода примеров в редакторе. Не пытайтесь ускорить процесс изучения лишь быстрым чтением материала. Большую часть времени нужно проводить за набором кода и его тестированием.

Присваивание переменных по значению

По умолчанию, переменные в PHP присваиваются по значению. Это значит, что после того, как значение одной переменной будет присвоено другой, обе переменные будут иметь одно и то же значение, но изменение после этого значения одной из них не повлияет на значение другой (см. пример №2). Таким образом, переменная, присвоенная по значению, и оригинальная переменная будут указывать на разные области памяти и являться независимыми друг от друга.

PHP Результат htmlCodes
<?php
	
//Инициализировали переменную (присвоили значение)
$c=5; 					

//Присвоили переменной $b переменную $c, 
//теперь $b==$c==5
$b=$c;   				 

//Изменили значение переменной $b, при этом
//значение переменной $c не изменилось ($c==5)
$b='new'; 			 
echo 'c='.$c.'<br>';	 

//Опять присвоили переменной $b переменную $c, 
//теперь $b==5 
$b=$c;  				

//Изменили значение переменной $c, при этом
//значение переменной $b не изменилось ($b==5)
$c='sos';  			 
echo 'b='.$b.'<br>';	 

?>

Пример №2. Присвоение переменных по значению

Присваивание переменных по ссылке

Если же нужно, чтобы новая переменная ссылалась на оригинальную переменную, а не была независимой, следует присваивать переменную по ссылке. Для этого в процессе присвоения нужно просто добавлять знак амперсанда & перед оригинальной переменной (см. пример №3). В результате переменная, присвоенная по ссылке, и оригинальная переменная будут указывать на одну и ту же область памяти, а изменение значения одной из них сразу же отразится на значении другой.

PHP Результат htmlCodes
<?php	

//Инициализировали переменную (присвоили значение)
$c=5; 								

//Присвоили по ссылке переменной $b переменную $c, 
//теперь $b==$c==5 
$b=&$c; 							 
echo 'c='.$c.' b='.$b.'<br>';	

//Изменили значение переменной $b, 
//теперь $b=='new' и $c также равна 'new'
$b='new'; 						
echo 'c='.$c.' b='.$b.'<br>';	 

//Изменили значение переменной $c, теперь 
//$c==20 и $b также изменилась ($b==20)
$c=20;  							
echo 'c='.$c.' b='.$b.'<br>';	

?>

Пример №3. Присвоение переменных по ссылке

Динамическое имя переменной в PHP

В PHP имеется возможность использовать имена одних переменных в качестве значения других переменных (см. пример №4). В таких случаях говорят, что переменная используется в качестве динамического имени другой переменной.

PHP Результат htmlCodes
<?php	

//Задали число яблок
$apple=3; 		
//Задали число апельсинов
$orange=7;		

//Присвоили переменной в качестве значения 
//строку с именем первой переменной
$a='apple'; 	
//Выведет 3 
echo 'Количество фруктов: ', ${$a}, '.<br>'; 	

//Присвоили переменной в качестве значения 
//строку с именем второй переменной
$a='orange'; 	
//Выведет 7 вместо ${$a}
echo "Количество фруктов: ${$a}."; 		

/* Во втором случае переменная указывается внутри строки,
взятой в двойные кавычки */

?>

Пример №4. Переменные переменных

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

Разрешается применять переменные внутри строк, взятых в двойные кавычки (см. примеры №4 и №5). При этом, для однозначной и недвумысленной интерполяции (замены имени переменной ее значением), как переменную, используемую в качестве имени другой переменной (переменная переменной), так и применяемую внутри строки, следует заключать в фигурные скобки. При этом переменные, расположенные внутри строк, взятых в одинарные кавычки, будут интерпретироваться как обычный текст даже в том случае, если они будут заключены в фигурные скобки.

PHP Результат htmlCodes
<?php	

//Теперь $a=='apple'
$a='apple';  				 
//Выведет просто '$a' вместо строки 'apple', т.к. 
//PHP видит переменные только внутри двойных кавычек
echo '$a'.'<br>'; 	 

//Выведет 'apples' 
echo "{$a}s".'<br>';

//Выведет просто '{$a}s', т.к. кавычки одинарные
echo '{$a}s'.'<br>'; 

//Выведет 'Это { apple}' вместо 'Это apple', 
//т.к. пробела между { и $ быть не должно  
echo "Это { $a}";  	

?>

Пример №5. Интерполяция переменных в строках

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

После того, как переменная была создана, к ней можно обращаться по ее имени, не забывая про знак доллара $ перед ним. Однако при этом нужно помнить, что в большинстве случаев переменная будет доступна только в той области видимости, в которой она была создана. Если она была создана в глобальной области видимости, т.е. вне определяемой пользователем функции в любом месте кода, то по умолчанию она будет видима только в глобальной области видимости и недоступна внутри функций (см. пример №6). И наоборот, если она была создана в локальной области видимости, т.е. внутри определяемой пользователем функции, то по умолчанию она будет видима только в данной локальной области видимости и недоступна вне этой функции, включая другие локальные области видимости.

PHP Результат htmlCodes
<?php
	
	//Объявили новую пользовательскую функцию m_func(),
	//которая просто инициализирует локальную переменную
	function m_func(){ 	            
		$sum='local_var';  

		/* Переменные, которые создаются внутри фигурных скобок функции, 
		относятся к локальной области видимости */

		//При вызове функции выведет 'local_var'
		//После закрывающей скобки началась глобальная область видимости
		echo $sum.'<br>';  
	} 			     				 
	
	//Выведет ошибку, т.к. обращение к переменной идет из глобальной 
	//области видимости, а здесь такой переменной не существует 
	//echo $sum.'<br>';	
	
	//Вызываем функцию, которая выведет 'local_var'
	m_func();     			  
				
	//Создали глобальную переменную
	$sum_2='global_var';

	/* Переменные, которые создаются вне фигурных скобок функции, т.е. в коде 
	верхнего уровня, относятся к глобальной области видимости */

	//Выведет 'global_var' 
	echo $sum_2.'<br>';		

	//Объявили новую пользовательскую функцию m_func_2(), 
	//которая пытается вывести значение глобальной переменной 
	function m_func_2(){ 	           
		echo $sum_2.'<br>';	
	} 
	
	//Вызываем функцию и получаем ошибку, т.к. функция обращается 
	//к глобальной переменной внутри себя, т.е. в локальной 
	//области видимости, где переменная не определена
	//m_func_2(); 

?>

Пример №6. Локальные и глобальные переменные

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

PHP Результат htmlCodes
<?php
	
	function m_func(){            
		//Создали локальную переменную
		$sum='local_var';  
		//При вызове функции выведет 'local_var'
		echo $sum.'<br>';   
	} 	
	
	//Создали глобальную переменную
	$sum='global_var'; 	 
	
	//Выведет 'global_var'
	echo $sum.'<br>'; 	 
	//Выведет 'local_var'
	m_func(); 				 	   

?>

Пример №7. Использование локальных и глобальных переменных с одинаковыми именами

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

Если требуется получить доступ к глобальной переменной из локальной области видимости (изнутри тела функции), то следует использовать ключевое слово global, которое будет указывать интерпретатору, что следует использовать именно глобальную версию переменной (см. пример №8). Переменные указываются после ключевого слова через пробел и разделяются запятыми. При этом не существует ограничений на количество используемых функцией глобальных переменных.

PHP Результат htmlCodes
<?php
	
//Создали первую глобальную переменную
$sum_1='global_var_1'; 		
//Создали вторую глобальную переменную
$sum_2='global_var_2'; 		

//Создали пользовательскую функцию
function m_func(){  			        
	//Создали локальную переменную
	$sum='local_var'; 			
	//Указали, что будут использоваться 
	//глобальные переменные внутри функции
	global $sum_1, $sum_2;  
	//Присвоили новое значение глобальной переменной
	$sum_1=10;  				
	echo $sum, ' ', $sum_1, ' ', $sum_2.'<br>';  
} 	

//Выведет 'local_var 10 global_var_2'  
m_func(); 						
//Выведет '10 global_var_2', т.к. после вызова
//функции значение глобальной переменной было изменено
echo $sum_1, ' ', $sum_2.'<br>'; 

?>

Пример №8. Использование ключевого слова global

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

Следует отметить, что значения глобальных переменных после их инициализации остаются неизменными до тех пор, пока они не будут изменены или сами переменные не будут удалены. Что касается локальных переменных, то при каждом вызове функции, они инициализируются заново, а при выходе из функции автоматически уничтожаются. Поэтому, в случае необходимости сохранять значение локальной переменной между вызовами функции, следует объявить ее статической при помощи ключевого слова static (см. пример №9).

PHP Результат htmlCodes
<?php
	
function m_func() {               
//Объявили статическую переменную и присвоили ей 0
static $sum=0;   		 
//Увеличили значение статической переменной на единицу
$sum = $sum+1;   		
//Объявили локальную переменную и присвоили ей 0 
$sum_2=0;   	 			
//Увеличили значение локальной переменной на единицу
$sum_2 = $sum_2+1; 	
echo 'Значение статической переменной равно ', $sum, '<br>';
echo 'Значение локальной переменной равно ', $sum_2, '<br>';
} 

//Выведет для обоих переменных 1 
m_func(); 				
// Выведет для локальной переменной опять 1, а для статической - 2 
m_func(); 				

/* При вызове функции локальная переменная всегда будет 
инициализироваться заново, а статическая будет сохранять приобретенное 
при предыдущем вызове значение */

?>

Пример №9. Использование статических переменных

Удаление переменных в PHP

Когда переменная становится не нужна, ее можно удалить. Для этого используется функция unset(), которой в качестве аргументов нужно через запятую передать удаляемые переменные. При этом, если переменная, объявленная глобальной либо переданная функции по ссылке, удаляется внутри функции, то будет удалена только локальная переменная, а переменная вне функции удалена не будет. Переменная, объявленная статической, также будет удалена только в контексте дальнейшего выполнения функции, а при последующем вызове этой функции предыдущее значение переменной будет восстановлено (см. пример №10).

PHP Результат htmlCodes
<?php
	
//Присвоили переменной число 8 
$a=8;  								
//Присвоили переменной строку "city"
$b="city"; 						

//Создаем пользовательскую функцию
function my_func(){   
	
	//Ссылаемся на глобальную переменную
	global $a; 					
	//Изменили значение глобальной переменной
	$a=20;							
	//Создали статическую переменную
	static $c=10; 			
	
	//Выведет '20 10' при каждом(!) вызове функции
	echo $a,' ',$c.'<br>';   
	
	//Удаляем локальные переменные, теперь до конца 
	//выполнения данного вызова функции их не существует
	unset($a,$c); 			
	
	//При вызове функции интерпретатор выведет ошибку, т.к. такие   
	//переменные больше не существуют до конца вызова функции
	echo $a,' ',$c.'<br>';   
}

//Вызываем функцию
my_func(); 		
//Выведет строку '20 city', т.к. глобальная переменная $a 
//была изменена во время вызова функции my_func(), но  
//при этом удаление внутри функции на нее не повлияло
echo $a,' ',$b.'<br>';  	 
							
//Удалили глобальные переменные
unset($a,$b); 						   
//Интерпретатор выведет ошибку, т.к. такие 
//переменные больше не существуют
echo $a,' ',$b.'<br>';  	 					   

?>

Пример №10. Удаление переменных

Быстрый переход к другим страницам