§1. Введение в PHP

1.1. Что такое PHP?

Одним из лидеров среди языков программирования, применяющихся для создания динамических веб-сайтов является язык PHP, который к тому же поддерживается подавляющим большинством хостинг-провайдеров.

PHP (рекурсивный акроним от англ. Hypertext Preprocessor) – распространенный скриптовый язык общего назначения с исходным открытым кодом, специально созданный для ведения веб-разработок.

В настоящее время PHP входит в десятку самых популярных языков программирования в мире. Его используют как всемирно известные гиганты вроде Wikipedia или Facebook, так и большинство малых проектов вроде нашего сайта.

С момента своего возникновения в начале 90-х годов PHP динамично развивался и в декабре 2015 года было объявлено о выходе PHP версии 7.0.0, которая разрабатывалась с упором на увеличение производительности и уменьшение потребления памяти.

Узнать последние новости о PHP, скачать учебник или сам установочный пакет PHP можно на официальном сайте http://php.net.

1.2. Установка PHP.

В отличие от языка JavaScript, который работает на стороне клиента, PHP является серверным языком программирования и отвечает за функциональность сайта на стороне сервера. Поэтому в настоящее время браузеры не имеют интерпретатора PHP и, следовательно, не могут понимать и выполнять php-скрипты. Зато благодаря огромной популярности PHP его интерпретатор имеется на большинстве серверов хостинг-провайдеров, что дает возможность веб-разработчикам размещать на них свои сайты, написанные с помощью этого языка.

Но прежде, чем разместить сайт на хостинге, необходимо его создать и протестировать. Соответственно, возникает необходимость в установке своего локального сервера в связке с PHP, имея которые можно создавать динамические интернет страницы прямо у себя на компьютере без необходимости использования услуг провайдеров, по крайней мере до тех пор, пока сайт не будет готов к размещению в интернете. Однако установка сервера – это довольно сложная задача для новичков, поэтому целесообразнее воспользоваться одним из множества готовых решений, например, XAMPP.

XAMPP – это бесплатная кроссплатформенная сборка веб-сервера, которая включает в себя ряд необходимых для веб-разработок приложений: сервер Apache, систему управления базами данных (СУБД) MySQL, интерпретатор языка PHP, язык программирования Perl и большое количество дополнительных библиотек, позволяющих пользователю запустить полноценный веб-сервер.

Скачать установочный файл XAMPP можно здесь. После установки приложения вы автоматически становитесь счастливым обладателем своего локального сервера, на котором сможете располагать и тестировать создаваемые вами веб-страницы. Для этого достаточно поместить папку с сайтом непосредственно на XAMPP-сервер в папку htdocs.

Чтобы php-скрипты работали правильно, путь к ним, да и вообще к веб-страницам, размещенным на локальном сервере, нужно указывать в формате http://localhost/test/php/introduction_1.php. Здесь test – это корневая папка с вашим сайтом. При этом указывать саму папку htdocs и путь к ней не нужно, иначе вместо выполнения php-скрипта, браузер будет выводить на экран php-код в виде обычного текста.

1.3. Вставка php-кода в html-документ.

PHP тесно связан с HTML, поэтому очень часто приходится использовать не чистые php-скрипты, а смесь со вставками php-кода в html-документ. С другой стороны PHP выполняется на сервере и способен сам генерировать html-страницы, которые он и отсылает клиенту.

Для того, чтобы интерпретатор PHP мог понять, что он имеет дело именно с php-кодом, а не с тегами HTML или кодом другого языка, применяются специальные теги <?php и ?>, которые указывают ему где начинается и заканчивается непосредственно код PHP. В примере 1.1 показан простой файл, представляющий собой смесь из HTML и PHP.

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">	
	<title>Первый php-скрипт</title>
</head>
<body>
	<?php 
		/* Оператор echo выводит строки, перечисляемые через запятую, 
		в код html-документа */
		echo 'Эта строка будет сперва обработана интерпретатором PHP <br>
			   и только потом отдана по запросу серверу для дальнейшей <br>
				отправки браузеру клиента.';
	?>
	
	<p>
		А эта строка не будет обработана PHP, <br>
		т.к. она находится вне тегов &#60;?php и &#62;. Она будет <br>
		отдана по запросу серверу, а затем и браузеру клиента без <br>
		обработки в первоначальном виде.
	</p>
</body>
</html>

Пример 1.1. Вставка кода PHP в html-документ

Таким образом, в большинстве случаев все, что находится вне указанных открывающего и закрывающего тегов, будет проигнорировано интерпретатором PHP и отдано по запросу без изменения за исключением случая, когда внутри php-кода используется условный оператор, который определяет, что следует пропустить, а что нет. Так в примере 1.2, интерпретатор PHP пропустит блок html-кода, который не соответствует условию оператора if (будет рассмотрен позже).

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">	
	<title>Введение в PHP</title>
</head>
<body>
	<?php 
		$a=5; 		//присвоили переменной значение 
		if($a==5){  //разрываем код PHP 
	?>
	<p>
		Эта часть кода html-страницы будет выдана по запросу<br>
		без изменения, т.к. условие истинно.
	</p>
	<?php 
		}else{ 		//эта часть выполнится только, если $a не равно 5
	?>
	<p>
		А вот этот абзац не будет показан, т.к. $a==5 (равно).
	</p>
	<?php 
		}  			//оператор if и другие будут рассмотрены позже
	?>
</body>
</html>

Пример 1.2. Еще один вариант вставки кода PHP в html-документ

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

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

Добавим, что всего существует четыре набора тегов для обозначения php-кода: <?php и ?>, <script language="php"> и </script>, которые доступны всегда, а также короткие теги <? и ?>, <% и %>, которые доступны, только если они включены с помощью соответствующих директив в конфигурационном файле php.ini, или PHP был скомпилирован с опцией --enable-short-tags. Мы всегда будем использовать первую пару тегов, тем более, что в HTML 5 атрибут language считается устаревшим.

Если файл содержит только php-код, разрешается опускать закрывающий тег в конце файла, что иногда бывает очень полезным, т.к. позволяет избежать случайных символов пробелов или переводов строк после закрывающего тега.

1.4. Лексическая структура PHP.

В данном пункте мы рассмотрим лексическую структуру PHP.

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

Каждое отдельное правило в лексической структуре языка программирования называют лексемой. Она представляет собою минимальную единицу кода программы, которая имеет для интерпретатора определенный смысл и не может быть разбита на более мелкие логические части. К лексемам относятся литералы (неименованные значения некоторого типа данных, например, число 10, строка "яблоко" и т.д.), идентификаторы, ключевые слова, знаки операторов и т.д.

Идентификаторы представляют собой просто имена. В PHP идентификаторы чувствительны к регистру символов, должны начинаться со знака подчеркивания или буквы латинского алфавита и могут состоять только из букв латинского алфавита, цифр и знаков подчеркивания. Например, идентификаторы _var_1, _Var_1 и _VAR_1 обозначают имена совершенно разных переменных или функций, а комбинации символов 15var_1, (:Var_1 или ру_VAR_1 не могут использоваться в качестве идентификаторов, т.к. они не начинаются со знака подчеркивания или буквы латинского алфавита и к тому же содержат недопустимые символы.

Для лучшего восприятия кода следует давать идентификаторам понятные и по возможности краткие названия, которые бы соответствовали, например, хранящимся в переменных данным или же выполняемым функциями действиям. Кроме того, идентификаторы могут состоять не только из одной буквы, но даже из нескольких слов. Для таких случаев в программировании существуют два распространенных устоявшихся стиля записи идентификаторов, которые называются CamelCase (верблюжьяНотация) и Snake_case (змеиная_нотация). Если идентификатор состоит из одного слова, то в обоих случаях он пишется строчными буквами. При наличии двух и более слов, в верблюжей нотации первое слово идентификатора пишется строчными буквами, а каждое последующее слово начинается с заглавной буквы, в змеиной нотации все слова пишутся строчными буквами, но каждое последующее слово идентификатора отделяется от предыдущего знаком подчеркивания (см. пример 1.3).

Как и во многих других языках программирования в PHP каждая инструкция (команда на языке PHP) отделяется от других точкой с запятой ';', которая обычно ставится в той же строке в конце каждой инструкции. Если инструкция является последней в блоке php-кода, то после нее точку с запятой разрешается не ставить, т.к. закрывающий тег сделает это автоматически.

Что касается комментариев, то в PHP используются как однострочные комментарии, так и многострочные. Для однострочных комментариев используется комбинация символов '//' или знак решетки '#'. Мы будем использовать первый вариант. Однострочные комментарии идут только до конца строки или же до закрывающего тега ?>, который закрывает текущий блок php-кода в независимости от наличия в данном месте комментария (см. пример 1.3). При этом важно помнить, что закрывающий тег </script> не завершает режим PHP в однострочном комментарии, т.е. сам считается комментарием.

<?php	
$greenApple=3; //Создали переменную задав имя в верблюжей нотации
$red_apple=5;  //Создали переменную задав имя в змеиной нотации
?>

<?php				//Однострочный комментарий идет до конца строки
					//или до закрывающего тега ?>
		
<?php	
	# Комментарий в стиле оболочки Unix
	
	/* Многострочным комментарием является любой текст,
	включая закрывающие теги ?> */
		
	/* Многострочные комментарии /* не могут быть */
	вложены друг в друга */
?>

Пример 1.3. Лексическая структура PHP

Многострочные комментарии представляют собой любой текст, расположенный между комбинациями символов '/*' и '*/'. Как следует из названия, многострочные комментарии могут содержать несколько строк, но при этом не могут быть вложенными друг в друга. Кроме того, все виды закрывающих тегов PHP, расположенные внутри многострочных комментариев, не завершают режим PHP, т.е. сами считаются комментариями.

Текст комментариев на странице не отображается, но их использование переоценить практически невозможно. Ведь любой программист на собственном опыте знает, что по прошествии определенного времени разобраться даже в собственном коде становится все сложнее. Комментарии же позволяют:

В любом случае, комментарии ускоряют как разработку кода, так и его отладку в дальнейшем.

В конце также отметим, что для улучшения читабельности и восприятия кода следует применять его форматирование, используя в качестве разделителей пробельные символы, к которым относятся пробелы, символы табуляции, разрывы строк. Поскольку интерпретатор игнорирует подряд идущие их комбинации между отдельными лексемами, у программиста появляется возможность форматировать исходный код программы по своему усмотрению, делая его более наглядным для чтения и легким для восприятия. Чтобы убедиться в этом, попробуйте набрать хотя бы часть кода любого из представленных выше примеров в одну строчку и без форматирующих пробельных символов.

1.5. Понятие переменной.

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

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">	
	<title>Переменные</title>
</head>
<body>
<?php 
	$apples=0; 		//Присвоили переменной начальное значение
	
	/* Оператор echo выводит перечисляемые через запятую 
	переменные в код html-документа, но перед выводом преобразует 
	их в строки, подробнее об этом позже*/
	
	echo "Пока что у нас имеется ", $apples, " яблок.<br>";
		
	$apples=5; 		//Присвоим переменной новое значение
	
	echo "После встряски дерева яблок стало ", $apples, ".<br>";
	
	/* Изменим значение переменной прибавив еще пять яблок.
	Для этого к прежнему значению прибавим число 5, теперь 
	$apples==10 (равно) */
	$apples=$apples+5; 
	$Apples=3;	 	//$Apples и $apples разные переменные
	
	echo "От ветра упало еще 5 яблок и теперь их стало ", 
		 $apples, ".<br>", "Из них ", $Apples, " яблока 
		 оказались червивыми.<br>";
?>
</body>
</html>

Пример 1.4. Переменные в PHP

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример 1.7. Переменные переменных

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<?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>';  
} 	

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

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

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

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

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

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

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

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

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

unset($a,$b); 			//Удалили глобальные переменные  
echo $a,' ',$b.'<br>';  	 //Интерпретатор выведет ошибку, т.к. такие 
							//переменные больше не существуют					   
?>

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

1.6. Понятие константы.

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

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

Следует также помнить, что в отличие от переменных, после определения константы она становится доступной в любой области видимости, но ее значение уже нельзя изменить или аннулировать. Кроме того, константы нельзя использовать внутри строк.

<?php	
define('a', 23); 		   //Теперь a==23. Отметим, что имя константы всегда берется  
							   //в кавычки,а значение только, когда является строкой
echo a, '<br>';     	   //Выведет '23'

//define('a', 'apple'); //Вызовет ошибку, т.к. переопределить значение 
					         //константы уже нельзя

define('first_name', 'Ivan');  //Теперь first_name=='Ivan'. Взяли значение  
										 //константы в кавычки, т.к. оно является строкой						
echo first_name, '<br>'; 		 //Выведет 'Ivan'
?>

Пример 1.14. Создание констант при помощи функции define()

Также константы можно создавать при помощи ключевого слова const (от англ. constant), но сделать это можно только в коде самого верхнего уровня, т.к. в этом случае константы создаются еще на стадии компиляции сценария. Это значит, что нельзя объявлять константы при помощи ключевого слова const внутри функций, циклов, условных выражений или блоков try/catch (см. пример 1.15).

<?php	
const a=23;  		  //Теперь a==23. Отметим, что имя константы всегда берется  
						  //в кавычки,а значение только, когда является строкой
echo a, '<br>';     //Выведет '23'

//const a='apple';  //Вызовет ошибку, т.к. переопределить значение 
						  //константы уже нельзя

const first_name='Ivan';  	//Теперь first_name=='Ivan'. Взяли значение  
									//константы в кавычки, т.к. оно является строкой						
echo first_name, '<br>'; 	//Выведет 'Ivan'

function my_func(){ 			//Определяем функцию
	//const c=10;				//Интерпретатор сообщит об ошибке
}

if(a==23){						//Условный оператор if (рассмотрим позже)
	//const b=10;				//Интерпретатор сообщит об ошибке
}
/* Проверьте в браузере, закомментировав часть кода и выводя его поочередно */
?>

Пример 1.15. Создание констант при помощи ключевого слова const

На этом вводную часть мы заканчиваем. Далее до конца первой части мы рассмотрим основы синтаксиса PHP, включающего понятия типов данных, операторов, функций, классов и объектов и т.д. Вторая часть будет посвящена вопросам практического применения PHP в ходе проектирования, верстки и управления сайтами.

Контрольные вопросы и задания

  1. Дайте определение языку PHP. Какая версия языка вышла в 2015 году?
  2. Понимают ли язык PHP браузеры? Почему?
  3. Как разместить свой сайт на локальном сервере? В каком формате нужно указывать путь к нему?
  4. Каким образом происходит вставка кода PHP в html-документ? В каком месте html-документа разрешается вставлять php-код?
  5. В каком случае код результирующей html-страницы будет удален интерпретатором PHP в ходе ее формирования по запросу пользователя?
  6. Нужны ли дополнительные настройки сервера для того, чтобы PHP искал php-код в файлах с расширением .html?
  7. Перечислите все виды тегов для выделения блоков php-кода?
  8. Дайте определение лексической структуры языка программирования.
  9. Что вы можете сказать о правилах составления идентификаторов в PHP?
  10. Каким образом в PHP одна инструкция отделяется от другой?
  11. Перечислите все виды комментариев, которые используются в PHP?
  12. В каких случаях закрывающие теги завершают комментарий, а в каких сами являются частью комментария?
  13. Как присвоить по ссылке одной переменной другую переменную? Чем отличаются переменные, присвоенные по значению, от переменных, присвоенных по ссылке?
  14. Что означает фраза 'переменная переменной'?
  15. Разрешается ли использование переменных внутри строк?
  16. Как получить доступ к глобальной переменной изнутри тела функции?
  17. Что такое статическая переменная?
  18. Как удалить переменную?
  19. Для чего применяются константы? Как они создаются?
  20. Где можно создавать константы при помощи ключевого слова const?

Словарь новых английских слов

brackets [ˈbrækəts] – скобки.
square [skwɛː] – квадрат, квадратный.
angle [ˈæŋɡl] – угол, угловой.
curly [ˈkəːli] – фигурный, изогнутый, волнистый.
round [raʊnd] – круглый.
preprocessor [ˌpriːˈprəʊsɛsə] – предпроцессор.
hypertext [ˈhaɪpərtekst] – гипертекст.
camel [ˈkam(ə)l] – верблюд.
case [keɪs] – регистр клавиатуры.
try [traɪ] – пытаться, попытка.
catch [kætʃ] – поймать, захват.
snake [sneɪk] – змея, извиваться.
if [ɪf] – если.
global [ˈɡloʊbl] – глобальный, всеобщий.
local [ˈləʊk(ə)l] – локальный, местный.
static [ˈstætɪk] – статический, неподвижный.
define [dɪˈfʌɪn] – определять.
constant [ˈkɑːnstənt] – константа, постоянная.
echo [ˈekoʊ] – вторить, повторять, эхо.
unset [ʌnˈsɛt] – сбросить, удалить (переменную).

 

belarusweb.net   ©  Петр Романовский, Минск, 2016.