PHP

Документация на http://php.net/

Что такое PHP?

PHP, расшифровывающийся как "PHP: Hypertext Preprocessor" - «PHP: Препроцессор Гипертекста», является распространенным интерпретируемым языком общего назначения с открытым исходным кодом. PHP создавался специально для ведения web-разработок и код на нем может внедряться непосредственно в HTML-код. Синтаксис языка берет начало из C, Java и Perl, и является легким для изучения.

PHP был создан в 1994 году датским программистом Расмусом Лердорфом и изначально представлял собой набор скриптов на другом языке Perl. Позже этот набор скриптов был переписан в интерпретатор на языке Си.
Расмус Лердорф

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

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

Client -> Server -> PHP -> Client

На сегодняшний день PHP является наиболее распространенным языком веб-программирования. Подавляющие большинство сайтов и веб-сервисов в интернете написано с помощью PHP. По некоторым оценкам PHP применяется более чем на 80% сайтов, среди которых такие сервисы, как facebook.com, vk.com, baidu.com и другие. И такая популярность неудивительна. Простота языка позволяет быстро и легко создавать сайты и порталы различной сложности.

Преимущества предоставляемые PHP?

Существуют три основных области применения PHP
  • Создание скриптов для выполнения на стороне сервера
  • Создание скриптов для выполнения в командной строке
  • Создание оконных приложений, выполняющихся на стороне клиента.

Для всех наиболее распространенных операционных системам (Windows, MacOS, Linux) есть свои версии пакетов разработки на PHP, а это значит, что вы можете создавать веб-сайты на любой из этих операционных систем.

PHP может работать в связке с различными веб-серверами: Apache, Nginx, IIS.

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

PHP похож на язык Си, поэтому, зная Си или один из языков с сиподобным синтаксисом, будет проще овладеть PHP.

PHP способен генерировать не только HTML. Доступно формирование изображений, файлов PDF и даже роликов Flash (с использованием libswf и Ming), создаваемых «на лету». PHP также способен генерировать любые текстовые данные, такие, как XHTML и другие XML-файлы. PHP может осуществлять автоматическую генерацию таких файлов и сохранять их в файловой системе вашего сервера вместо того, чтобы отдавать клиенту, организуя, таким образом, серверный кэш для вашего динамического контента.

PHP поддерживает работу с множеством систем баз данных (MySQL, MSSQL, Oracle, Postgre, MongoDB и другие).

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

Постоянное развитие. PHP продолжает развиваться, выходят все новые версии, которые несут новые функции, адаптируя язык программирования к новым вызовам. И, как правило, перейти на новую версию не составляет труда.

Инструментарий

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

Запрос страницы в общем виде
Запрос страницы

Основы PHP

После установки веб-сервер, самое время создать самый знаменитый PHP-скрипт! Вызвав функцию phpinfo(), мы увидем множество полезной информации о системе и настройке.

				
	<?php phpinfo(); ?>
				
			

Поскольку каждая система настроена по-своему, phpinfo() обычно используется для проверки установок конфигурации и доступности предопределённых переменных в данной системе. Также phpinfo() является важной отладочной утилитой, так как содержит все данные EGPCS (Environment, GET, POST, Cookie, Server).

Синтаксис

PHP-скрипт может быть размещен в любом месте документа. Расширение файла для PHP-скриптов .php.

Когда PHP обрабатывает файл, он ищет открывающие и закрывающие теги, такие как <?php и ?>, которые указывают PHP, когда начинать и заканчивать обработку кода между ними. Подобный способ обработки позволяет PHP внедряться во все виды различных документов, так как всё, что находится вне пары открывающих и закрывающих тегов, будет проигнорировано парсером PHP.

					
<html>
	<head>
		<title>Title window</title>
		<meta charset ="utf-8">
	</head>

	<body>
		<h1>Big main title page</h1>
		<p>
		
<?php
	echo "Hello, user zamt!!";

	$arr[key] = value;
	$arr[] = value;

	switch (n) {
		case label1:
			// code to be executed if n=label1;
			break;
		case label2:
			// code to be executed if n=label2;
			break;
			.....
		default:
			// code to be executed if n is different from all labels;
	}

?>

		</p>
	</body>
</html>
	
					
				

Эта программа чрезвычайно проста. Все, что она делает, это вывод Hello World,user zamt!! используя инструкцию PHP echo. Заметьте, что файл не обязан быть выполняемым или еще как-то отличаться от других файлов. Сервер знает, что этот файл должен быть обработан PHP, так как файл обладает расширением .php, о котором в настройках сервера сказано, что подобные файлы должны передаваться PHP. Рассматривайте его как обычный HTML-файл, которому посчастливилось заполучить набор специальных тегов (доступных также и вам), способных на кучу интересных вещей.

Комментарии

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

					
<html>
	<head>
		<title>Title window</title>
		<meta charset="utf-8">
	</head>
	
	<body>
		<h1>Big main title page</h1>
		<p>
	<?php
		// Первый вид однострочных комментариев
		
		# Второй вид однострочных комментариев
		
		/* А это многострочные коментарии которые 
		бывает удобно использовать при описании модуля в самом начале */
	?>
		</p>
	</body>
	
</html>
					
				

Чувствительность к регистру

В PHP, все ключевые слова, классы, функции и определяемые пользователем функции не чувствительны к регистру.

В приведенном ниже примере, все четыре echo являются законными (и равными)

					
<?php
	echo "Hello, PS-15";
	Echo "Hello, PS-15";
	echO "Hello, PS-15";
	eCHo "Hello, PS-15";
					
				
Если файл содержит только код PHP, предпочтительно опустить закрывающий тег в конце файла. Это помогает избежать добавления случайных символов пробела или перевода строки после закрывающего тега PHP, которые могут послужить причиной нежелательных эффектов, так как PHP начинает выводить данные в буфер при отсутствии намерения у программиста выводить какие-либо данные в этой точке скрипта.

Однако все имена переменных чувствительны к регистру.

					
	<?php
	$var = "I am variable";

		echo $var; // "I am variable"
		echo $Var; // ""
		echo $VaR; // ""
		echo $VAR; // ""
	?>
					
				

Типы данных

PHP поддерживает девять простых типов.

Четыре скалярных типа:

Три смешанных типа:

И два специальных типа:

Вы также можете найти несколько упоминаний типа двойной точности (double). Рассматривайте его как число с плавающей точкой, два имени существуют только по историческим причинам.

Как правило, программист не устанавливает тип переменной; обычно это делает PHP во время выполнения программы в зависимости от контекста, в котором используется переменная.

Переменные

Переменные "контейнеры" для хранения информации. В PHP переменная начинается с знака $, за которым следует имя переменной(см. предыдущий пример).

Переменная может иметь короткое имя (например, х и у) или более описательное имя (age, fio, path).

Правила для PHP переменных:

Помните, что имена переменных PHP чувствительны к регистру!
					
$str = "gbpou zamt";
$fl = M_PI;
$i = 34;
$bool = false;

	echo gettype($fl); //double
	echo gettype($bool);//boolean
  
	/* Здесь вывод более информативнее. Тип(размер) -> значение */
	var_dump($str); // string(10) "gbpou zamt"
					
				

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

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

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

В PHP, переменные могут быть объявлены в любом месте скрипта.

Область видимости переменной - это контекст, в котором эта переменная определена.

PHP имеет три области видимости для переменных: локальная, глобальная и статическая переменная

Переменная, объявленная вне функции имеет глобальную область видимости и доступна во всём скрипте. А используемая внутри функции переменная по умолчанию ограничена локальной областью видимости функции и доступна только в ней.

					
<?php
	$g = 1; // глобальная переменная

	function test() {
		$l = "local";
		
		echo $g; // "1"
		echo $l; // "local"
	}
	echo $l; // "" - не доступна локальная переменная
?>
					
				

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

Область видимости локальных переменных →

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

					
	<?php
		function add() {
			$inc = 0;
			echo $inc;
			$inc = $inc + 1;
		}
	?>
					
				

Эта функция довольно бесполезна, поскольку при каждом вызове она устанавливает $a в 0 и выводит 0. Инкремент переменной $a++ здесь не играет роли, так как при выходе из функции переменная $a исчезает. Чтобы написать полезную считающую функцию, которая не будет терять текущего значения счетчика, переменная $a объявляется как static

					
	<?php
		function add() {
			static $inc = 0;
			echo $inc;
			$inc = $inc + 1;
		}
	?>
					
				

Теперь $a будет проинициализирована только при первом вызове функции, а каждый вызов функции add() будет выводить значение $a и инкрементировать его.

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

Константы

Вы можете определить константу с помощью функции define(). В отличие от переменных, не нужно предварять имя константы символом $.

					
	<?php
		define("CONSTNAME", "VALUE");
		echo CONSTNAME; // "VALUE"
		echo constname; // ОШИБКА!!
	?>
					
				

Константы могут быть определены и доступны в любом месте без учета области видимости.

Существуют девять волшебных констант, которые меняют свое значение в зависимости от контекста, в котором они используются. Например, значение __LINE__ зависит от строки в скрипте, на которой эта константа указана. Все "волшебные" константы разрешаются во время компиляции, в отличии от обычных констант, которые разрешаются во время исполнения.

Волшебные константы
ИмяОписание
__LINE__Текущий номер строки в файле.
__FILE__Полный путь и имя текущего файла с развернутыми симлинками. Если используется внутри подключаемого файла, то возвращается имя данного файла.
__DIR__Директория файла. Если используется внутри подключаемого файла, то возвращается директория этого файла. Это эквивалентно вызову dirname(__FILE__). Возвращаемое имя директории не оканчивается на слэш, за исключением корневой директории.
__FUNCTION__Имя функции.

Пример использования волшебных констант →

Операторы

Для начала всем знакомые операции

Арифметические операции
ПримерНазваниеРезультат
+$aИдентичностьКонвертация $a в int или float, что более подходит.
-$aОтрицаниеСмена знака $a.
$a + $bСложениеСумма $a и $b.
$a - $bВычитаниеРазность $a и $b.
$a * $bУмножениеПроизведение $a и $b.
$a / $bДелениеЧастное от деления $a на $b.
$a % $bДеление по модулюЦелочисленный остаток от деления $a на $b.
$a ** $bВозведение в степеньВозведение $a в степень $b. Добавлено в PHP 5.6.

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

					
	<?php
		$x = 3;
		$y = 4;
		
		$x += $y; 	// $x = $x + $y
		$x -= $y; 	// $x = $x - $y
		$x *= $y; 	// $x = $x * $y
		$x /= $y; 	// $x = $x / $y
		$x %= $y; 	// $x = $x % $y
	?>
					
				

PHP поддерживает префиксные и постфиксные операторы инкремента и декремента в стиле Си.

Операторы инкремента и декремента
ПримерНазваниеРезультат
++$aПрефиксный инкрементУвеличивает $a на единицу, затем возвращает значение $a.
$a++Постфиксный инкрементВозвращает значение $a, затем увеличивает $a на единицу.
--$aПрефиксный декрементУменьшает $a на единицу, затем возвращает значение $a.
$a--Постфиксный декрементВозвращает значение $a, затем уменьшает $a на единицу.

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

Операторы сравнения
ПримерНазваниеРезультат
$a == $bРавноTRUE если $a равно $b после преобразования типов.
$a === $bТождественно равноTRUE если $a равно $b и имеет тот же тип.
$a != $bНе равноTRUE если $a не равно $b после преобразования типов.
$a <> $bНе равноTRUE если $a не равно $b после преобразования типов.
$a !== $bТождественно не равноTRUE если $a не равно $b или они разных типов.
$a < $bМеньшеTRUE если $a строго меньше $b.
$a > $bБольшеTRUE если $a строго больше $b.
$a <= $bМеньше или равноTRUE если $a меньше или равно $b.
$a >= $bБольше или равноTRUE если $a больше или равно $b.

Тернарный оператор "?:"

					
	<?php
		$a = 3;
		$b = 6;
		$res = $a<$b ? $b-$a : $a+$b;
	?>
					
				

Выражение (expr1) ? (expr2) : (expr3) интерпретируется как expr2, если expr1 имеет значение TRUE, или как expr3 если expr1 имеет значение FALSE.

Тернарный оператор →

Логические операторы
ПримерНазваниеРезультат
$a and $bИTRUE если и $a, и $b TRUE.
$a or $bИлиTRUE если или $a, или $b TRUE.
$a xor $bИсключающее илиTRUE если $a, или $b TRUE, но не оба.
! $aОтрицаниеTRUE если $a не TRUE.
$a && $bИTRUE если и $a, и $b TRUE.
$a || $bИлиTRUE если или $a, или $b TRUE.
Смысл двух разных вариантов для операторов "and" и "or" в том, что они работают с различными приоритетами (смотрите таблицу Приоритет выполнения операторов).

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

					
	<?php
		$a = "Hello";
		$b = "user zamt";
		
		echo "String - " . $a . $b;
	?>
					
				

Конкатенация →

Алгоритмические конструкции

Любой сценарий PHP сформирован из ряда конструкций. Конструкцией могут быть операторы, функции, циклы, условные операторы. Конструкции обычно заканчиваются точкой с запятой. Кроме того, конструкции могут быть сгруппированы в группу, формируя группу конструкций с фигурными скобками {...}. Группа конструкций - это также отдельная конструкция. Конструкции языка PHP похожи на конструкции языка Си.

Условные конструкции

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

					
	<?php
		if (выражение) {
			инструкция
		}
	?>
					
				

Выражение вычисляется в булево значение. Если выражение принимает значение TRUE, PHP выполнит инструкцию, а если оно принимает значение FALSE - проигнорирует.

Часто необходимо выполнить одно выражение, если определенное условие верно, и другое выражение, если условие не верно. Именно для этого else и используется. else расширяет оператор if, чтобы выполнить выражение, в случае если условие в операторе if равно FALSE.

					
	<?php
// если инструкция одна то фигурные скобки можно опустить
		if (выражение)
			инструкция1
		else
			инструкция2
	?>
					
				

Так же существует конструкция elseif, как ее имя и говорит есть сочетание if и else. Аналогично else, она расширяет оператор if для выполнения различных выражений в случае, когда условие начального оператора if эквивалентно FALSE. Однако, в отличии от else, выполнение альтернативного выражения произойдет только тогда, когда условие оператора elseif будет являться равным TRUE.

					
	<?php
		if (выражение1)
			инструкция1
		elseif (выражение2)
			инструкция2
	.....
		elseif (выражениеN)
			инструкцияN
		else
			инструкция
	?>
					
				

Условные конструкции →

switch

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

					
	<?php
		switch (n) {
			case label1:
				// code to be executed if n=label1;
				break;
			case label2:
				// code to be executed if n=label2;
				break;
	.....
			default:
				// code to be executed if n is different from all labels;
		}
	?>
					
				

switch работает следующим образом. Во-первых, мы имеем одно выражение n (чаще всего это переменная), которое вычисляется один раз. Значение выражения затем сравнивают со значениями для каждого случая в структуре. Если есть совпадение, то блок кода , связанный с этим случае выполняется. break используется, чтобы предотвратить запуск кода в следующем случае автоматически. Оператор default используется, если совпадений не найдено.

Переключатель →

Циклы

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

Циклы позволяют повторять определенное (и даже неопределенное - когда работа цикла зависит от условия) колличество раз различные операторы. Данные операторы называются телом цикла. Проход цикла называется итерацией.

PHP поддерживает три вида циклов:

При использовании циклов есть возможность использования операторов break и continue. Первый из них прерывает работу всего цикла, а второй - только текущей итерации.

Циклы while являются простейшим видом циклов в PHP. Они ведут себя так же, как и их коллеги из языка C. Простейшей формой цикла while является следующее выражение

					
	<?php
		while (выражение) 
			инструкция
	?>
					
				

Смысл выражения while очень прост. Оно указывает PHP выполнять вложенные выражения повторно до тех пор, пока выражение в самом while является TRUE. Значение выражения проверяется каждый раз перед началом цикла, поэтому даже если значение выражения изменится в процессе выполнения вложенных выражений в цикле, выполнение не прекратится до конца итерации (каждый раз, когда PHP выполняет выражения в цикле - это одна итерация). В том случае, если выражение while равно FALSE с самого начала, вложенные выражения ни разу не будут выполнены.

Цикл do-while очень похож на цикл while, с тем отличием, что истинность выражения проверяется в конце итерации, а не в начале. Главное отличие от обычного цикла while в том, что первая итерация цикла do-while гарантированно выполнится (истинность выражения проверяется в конце итерации), тогда как она может не выполниться в обычном цикле while (истинность выражения которого проверяется в начале выполнения каждой итерации, и если изначально имеет значение FALSE, то выполнение цикла будет прервано сразу).

					
	<?php
		do { 
			инструкция
		} while (выражение)
	?>
					
				

Цикл for самый сложный цикл в PHP.

					
	<?php
		for (выражение1; выражение2; выражение3) 
			инструкция
	?>
					
				

Первое выражение всегда вычисляется (выполняется) только один раз в начале цикла.

В начале каждой итерации оценивается выражение 2. Если оно принимает значение TRUE, то цикл продолжается, и вложенные операторы будут выполнены. Если оно принимает значение FALSE, выполнение цикла заканчивается.

В конце каждой итерации выражение 3 вычисляется (выполняется).

Каждое из выражений может быть пустым или содержать несколько выражений, разделенных запятыми. В выражении2 все выражения, разделенные запятыми, вычисляются, но результат берется из последнего. Если выражение2 отсутствует, это означает, что цикл будет выполняться бесконечно. (PHP неявно воспринимает это значение как TRUE, так же, как в языке Си). Это может быть не столь бесполезно, сколь вы могли подумать, так как часто необходимо прервать цикл, используя условный оператор break вместо использования выражения в цикле for, которое принимает истинное значение.

Цикл for

Конструкция foreach предоставляет простой способ перебора массивов. foreach работает только с массивами и объектами, и будет генерировать ошибку при попытке использования с переменными других типов или неинициализированными переменными. Существует два вида синтаксиса

					
	<?php
		foreach (array_expression as $value) 
			statement

// Второй вариант 
		foreach (array_expression as $key => $value) 
			statement
	?>
					
				

Первый цикл перебирает массив, задаваемый с помощью array_expression. На каждой итерации значение текущего элемента присваивается переменной $value и внутренний указатель массива увеличивается на единицу (таким образом, на следующей итерации цикла работа будет происходить со следующим элементом).

Второй цикл будет дополнительно соотносить ключ текущего элемента с переменной $key на каждой итерации.

Цикл foreach

Функции

В любом языке программирования существуют подпрограммы.

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

В PHP такими подпрограммами являются пользовательские функции.

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

					
	<?php
		function functionName() {
			// code to be executed; 
		}
	?>
					
				

Внутри функции можно использовать любой корректный PHP-код, в том числе другие функции.

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

Все функции PHP имеют глобальную область видимости - они могут быть вызваны вне функции, даже если были определены внутри и наоборот.

Функция может принимать информацию в виде списка аргументов, который является списком разделенных запятыми выражений. Аргументы вычисляются слева направо.

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

Передача аргументов по значению →

Передача аргументов по ссылке

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

Если вы хотите, что бы аргумент всегда передавался по ссылке, вы можете указать амперсанд (&) перед именем аргумента в описании функции

					
	<?php
	$x = 2;
		function pow(&$n) {
			$n *= $n; // теперь аргмуент измениться на новое значение 
		}
		pow($x);
		echo $x; // в отличии от предыдущего примера - переменная уже имеет другое значение
	?>
					
				

Передача аргументов по ссылке →

Значения аргументов по умолчанию

Функция может определять значения по умолчанию.Пример использования аргументов по умолчанию →

Значение по умолчанию должно быть константным выражением, а не (к примеру) переменной или вызовом функции/метода класса

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

Возврат значений

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

Если конструкция return не указана, то функция вернет значение NULL.
					
	<?php
		function square($num) {
			return $num * $num;
		}
		echo square(4); // выводит "16"
	?>
					
				
Функция не может возвращать несколько значений, но аналогичного результата можно добиться, возвращая массив.

Пример использования return