Open
Close

Синтаксис php. Основы PHP — Функции PHP

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

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

Function имя_функции (параметры) { Тело функции }

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

Function mytime($h, $g) { $t = pow(2*$h/$g, 0.5); echo "Время падения с высоты ".$h." при g = ".$g." составляет ".$t." секунд."; } mytime(100, 9.81);

Теперь давайте разберем приведенный выше код. Сначала мы создаем новую функцию mytime . Для этого прописываем специальное слово function, после которого указываем имя создаваемой функции. Также рядом в скобках через запятую не забываем указать параметры для создаваемой функции PHP. Если таких параметров нет, то их можно не указывать и оставить скобки пустыми. Далее с новой строки открываем фигурные скобки и прописываем в них тело функции. В нашем случае это формула для расчета времени свободного падения. Для этого создаем переменную $t, а в качестве значения присваиваем ей формулу расчета времени свободного падения.

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

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

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

Функции PHP с параметрами и без параметров

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

Function mylink () { echo "

В приведенном выше примере мы создаем функцию без параметров с именем mylink. Далее в теле функции прописываем, что нужно выводить обычную ссылку. Теперь при вызове этой функции в любом месте документа будет выводиться текст или ссылка, которые прописаны в теле функции mylink.

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

Function mylink ($link, $target, $title, $anchor) { echo "$anchor"; } $mylink = "https://archive.сайт"; $mytarget = "_blank"; $mytitle = "Создание и продвижение сайтов"; $myanchor = "Создание и продвижение сайтов"; mylink($mylink, $mytarget, $mytitle, $myanchor);

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

Надеюсь, вы поняли всю суть функций PHP. Если нет, то рекомендую еще раз прочитать статью и проработать примеры. Материал не сложный, но очень важный поэтому, если вы всерьез решили изучить PHP, рекомендую тщательно проработать весь материал.

На этом данная статья подошла к концу. Если вы не хотите пропустить последних новостей сайта, рекомендую подписаться на новостную рассылку любым удобным для вас способом в пункте « » либо воспользоваться формой ниже.

На этом все. Удачи вам и успехов в изучении основ PHP.

Простая PHP-страница (Hello)

Создайте файл с именем hello.php в корневом каталоге ваших документов Web-сервера и запишите в него следующее:

Пример 2-1. Первый скрипт на PHP: hello.php
Тестируем PHP "; ?>
Эта программа выведет следующее:
Тестируем PHP Привет!


Заметим, что сходства со скриптами на CGI нет. Файл не обязан быть выполнимым или отмеченным любым другим образом. Это просто обычный файл HTML, в котором есть набор специальных тегов, делающих много интересного.
Эта программа чрезвычайно проста, и для создания настолько простой странички даже необязательно использовать PHP. Все что она делает - это выводит «Привет! с использованием функции PHP echo().
Если у вас этот пример не отображает ничего или выводит окно загрузки, или если вы видите весь этот файл в текстовом виде, то весьма вероятно, что ваш Web-сервер не имеет поддержки PHP. Попросите вашего администратора сервера включить такую поддержку. Предложите ему инструкцию по установке - раздел «Установка» данной документации. Если же вы хотите разрабатывать скрипты на PHP дома, то вам в раздел необходимые файлы. Дома можно разрабатывать скрипты с использованием любой операционной системы, но вам понадобится установить соответствующий Web-сервер.

Цель примера - показать формат специальных тегов PHP. В этом примере мы использовали . Таким образом можно сколько угодно раз переходить к коду PHP в файле HTML.

Существует множество текстовых редакторов и интегрированных сред разработки (IDE) , в которых вы можете создавать и редактировать файлы PHP.

Текстовые процессоры (Star Office Writer, Microsoft Word, Abiword и др.) в большинстве случаев не подходят для редактирования файлов PHP. Если вы используете текстовый процессор для создания скриптов на PHP, вы должны быть уверены, что сохраняете файл, как ЧИСТО ТЕКСТОВЫЙ. В противном случае PHP не сможет обработать и выполнить вашу программу.

При написании скриптов PHP с использованием встроенного «Блокнота» Windows необходимо сохранять файлы с расширением.php. «Блокнот» автоматически добавляет расширение.txt. Для обхода этой проблемы существует несколько методов.
Можно поместить название файла в кавычки (пример: “hello.php”).
Кроме того, можно выбрать «Все файлы» вместо «Текстовые документы» из ниспадающего списка с типами файлов в окне сохранения. После этого можно вводить имя файла без кавычек.

Переменные

Имена переменных

В РНР переменные начинаются со знака доллара ($). За этим знаком может следовать любое количество буквенно-цифровых символов и символов подчеркивания, но первый символ не может быть цифрой. Следует также помнить, что имена переменных в РНР учитывают регистр, в отличие от ключевых слов.

При объявлении переменных в РНР не требуется явно указывать тип переменной, при этом одна и та же переменная может иметь на протяжении программы разные типы.

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

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

Область действия переменной - это контекст, в котором она определена. Большая часть переменных PHP имеет одну область действия. Она охватывает также включенные (included) и необходимые (required) файлы. Например:
$a = 1; include "b.inc";
Здесь переменная $a будет доступна во включенном скрипте b.inc. Однако в определенных пользователем функциях вводится локальная область действия в пределах функции. Любая переменная, используемая в функции, по умолчанию ограничена локальной областью действия функции. Например:
$a = 1; /* глобальная область действия */ Function Test () { echo $a; /* ссылка на локальную переменную */ } Test ();
Этот скрипт ничего не выведет, потому что выржение echo ссылается на локальную версию переменной $a, которой в этой области действия не присвоено значение. Это отличается от языка C, вв котором глобальные переменные C автоматически становятся доступны функциям, если только они специально не переопределены локально. Это может вызвать проблемы, поскольку программист может непреднамеренно изменить глобальную переменную. В PHP глобальные переменные, если они будут использоваться в функции, должны объявляться в этой функции. Вот пример:
$a = 1; $b = 2; Function Sum () { global $a, $b; $b = $a + $b; } Sum (); echo $b;
Этот скрипт выведет цифру “3”. Путем объявления $a и $b глобальными в функции все ссылки на любую из этих переменных будут ссылаться на глобальную версию. число глобальных переменных, которыми может манипулировать функция, не ограничено.
Второй способ получить доступ к глобальным переменным - использовать специальныый определенный PHP массив $GLOBALS. Предыдущие пример можно переписать следующим образом:
$a = 1; $b = 2; Function Sum () { $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; } Sum (); echo $b;


массив $GLOBALS
Массив $GLOBALS - это ассоциативным массив, индексами в котором служат имена, а значениями элементов - значения соответствующих глобальных переменных.
Другая важная особенонсть областей действия переменных - статические переменные. Статическая переменная существует только в локальной функции, но не теряет значения после выхода программы из области действия функции. Расмотрим следующий пример:
Function Test () { $a = 0; echo $a; $a++; }
Эта функция достаточно бесполезна, поскольку каждый раз при вызове она устанавливает значение $a равным 0 и выводит на печать “0”. Выражение $a++, увеличивающее значение переменной, ничего не делает, поскольку, как только выполнение функции закончено, переменная $a исчезает. Чтобы создать полезную функцию-счетчик, не теряющую значений, объявим переменную $a как static:
Function Test () { static $a = 0; echo $a; $a++; }
Теперь при каждом вызове функции Test() она будет выдавать на печать значение переменной $a и увеличивать его.
Кроме того, статические переменные помогают в работе с рекурсивными функциями. Рекурсивной называется функция, которая вызывает сама себя. К написанию рекурсивных функций следует подходить осторожно, поскольку можно сделать цикл бесконечным. Необходимо создать способ прерывания рекурсии. Следующая простая функция ведет счет до 10 с помощью статической переменной $count и останавливает рекурсию:
Function Test () { static $count = 0; $count++; echo $count; if ($count < 10) { Test (); } $count--; }


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

  • integer;
  • string;
  • boolean;
  • double;
  • array;
  • object;

Целые
Целые числа задаются с использованием следующего синтаксиса:
$a = 1234; # десятичное число
$a = -123; # отрицательное число
$a = 0123; # восьмеричное число (эквивалнетно десятичному 83)
$a = 0123; # шестнадцатеричное число (эквивалнетно десятичному 18)


Размер целого цисла зависит от платформы, обычно максимлаьным может быть знаечение около 2 миллиардов (32 бита со знаком).
Есть функция gettype(), возвращающая тип, который РНР назначил переменной:
"; echo(gettype($var1)); ?>
В первом случае РНР вернет string, во втором integer.


Числа с плавающей точкой
Числа с плавающей точкой («числа двойной точности») задаются с использованием следующего синтаксиса:
$a = 1.234; $a = 1.2e3;
Размер числа с плавающей точкой зависит от платформы, обычно максимальным может быть число 1.8e308 с точностью около 14 десятичных цифр (64-битный формат IEEE).
Внимание
Обычно простые десятичные дроби типа 0.1 или 0.7 преборазуются в числа двойной точности с некоторой потерей точности. Это может привести к странным результатам: например, функция floor((0.1+0.7)*10) вернет значение 7 вместо ожидаемого 8, потому что результатом внутреннего представления будет число типа 7.9999999999....

Это объясняется тем фактом. что некоторые дроби невозможно точно выразить в десятичной записи с ограниченным числом знаков. Например, 1/3 в десятичной записи принимает вид 0.3333333. . ..
Поэтому никогда н едоверяйте результатам вычислений с плавающей точкой до последней цифры и никогда не проверяйте равенство чисел с плавающей точкой. Если Вам действительон нужна более высокая точность, используйте математические функции с произвольной точностью или функции gmp.


Строки
Строки могут задаваться с использованием одного или двух наборов разделителей.
Если строка заключена в двойные кавычки ("), переменные в строке будут раскрываться (в соответствии с некоторыми ограничениями синтаксического разбора). Как и в C и Perl, при указании специальных символов может использоваться обратный слеш ("\"):


Таблица 6-1 . Символы, кодируемые с использованием обратного слеша

Последовательность Значение
\n перевод строки (LF или 0x0A в кодировке ASCII)
\r возврат каретки (CR или 0x0D в кодировке ASCII)
\t горизонтальная табуляция (HT или 0x09 в кодировке ASCII)
\\ обратный слеш
\$ знак доллара
\" двойная кавычка
\{1,3} последовательность символов, соответствующая регулярному выражению, является символом в восьмеричной нотации
\x{1,2} последовательность символов, соответствующая регулярному выражению, является символом в шестнадцатеричной нотации

Если Вы попытаетесь представить таким образом другой символ, выведены будут и обратный слеш, и сам символ. В PHP 3 при этом будет выдано предупреждение на уровне E_NOTICE. В PHP 4 предупреждающее сообщение не генерируется.
Второй способ отделения строк - использование одиночных кавычек ("""). Если строка заключается в одинарные кавычки, в ней можно использовать только символы "\\" и "\"". Таикм образом Вы смоежет указывать одинарные кавычки и обратные слеши в строка, отделенной одинарными кавычками. Переменные в строке, отделенной одинарными кавычкамИ, разворачиваться не будут.
Еще один способ разделения строк - с помощью синтаксиса документов ("<<<"). После <<< укажите идентификатор, затем строку, а затем тот же самый идентификатор, чтобы закрыть «кавычки».
Закрывающий идентификатор должен начинатья в первом столбце строки. Кроме того, идентификтаор должен удовлетворять правилам именвоания, как и любая метка в PHP: он должен содержать только алфавитно-цифровые символы и подчеркивания и н едолжен начинаться с цифры или подчеркивания.
Такой текст ведет себя как строка в двойных кавычках, но без двойных кавычек. Это означает, что Вам не придется кодировать кавычки с помощью слеша, но использовать коды со слешем все равно можно. Переменные раскрываются, но следует проявлять осторожность при выржении сложных переменных в таикх строках. Пример 6-1 . Пример кавычек в строке типа документа
foo = "Foo"; $this->bar = array("Bar1", "Bar2", "Bar3"); } } $foo = new foo(); $name = "MyName"; echo <<foo. Теперь я печатаю {$foo->bar}. Здесь должна напечататься заглавная буква "A": \x41 EOT; ?>
Примечание: Поддержка такой записи строк добавлена в PHP 4.
Объединять строки можно с помощью оператора точки ".". Обратите внимание, что оператор "+" (сложение) не работает при объединении строк. Подробнее см. в разделе о строковых операторах.
Доступ к символам в строках можно получить, обрабатывая строки как индексированный массив символов, используя синтаксис языка C. Примеры см. ниже.


Пример 6-2 . Некоторые примеры работы со строками
Число: 9

" */ $num = 9; $str = "

Число: $num

"; /* Эта будет "

Число: $num

" */ $num = 9; $str = "

Число: $num

"; /* Получение первого символа строки */ $str = "Это тест."; $first = $str; /* Получение последнего символа строки. */ $str = "Это все еще тест."; $last = $str; ?>


Преобразование строк
Если строка оценивается как числовое значение, результирующие значение и тип определяются следующим образом.
Строка оценивается как число двойной точности, если она содержит любой их символов ".", "e" или "E". В противном случае она будет оценена как целое число.
Значение определяется начальной частью строки. Если строка начинается с допустимых числовых данных, ои будут использоваться в качестве значения. В противном случае значение будет равно 0 (ноль). Допустимые числовые данные - это необязательный знак, за которым следуют одна или несколько цифр (может присутствовать десятичная точка), а за ними необязательная экспонента. Экспонента - это "e" или "E", за которой следуют одна или несколько цифр.
Если первое выражение является строкой, тип переменной зависит от второго выражения.
$foo = 1 + "10.5"; // $foo имеет двойную точность (11.5) $foo = 1 + "-1.3e3"; // $foo имеет двойную точность (-1299) $foo = 1 + "bob-1.3e3"; // $foo - целое (1) $foo = 1 + "bob3"; // $foo - целое (1) $foo = 1 + "10 Small Pigs"; // $foo - целое (11) $foo = 1 + "10 Little Piggies"; // $foo - целое (11) $foo = "10.0 pigs " + 1; // $foo - целое (11) $foo = "10.0 pigs " + 1.0; // $foo имеет двойную точность (11)

\n";


Одномерные массивы
PHP поддерживает скалярные и ассоциативные массивы. Между ними фактичесик нет никакой разницы. Создать массив можно с помощью функций list() или array() или путем явного определения значений элементов массива.
$a = "abc"; $a = "def"; $b["foo"] = 13;
Можно создать массив и путем простого добавления в него элементов. При присвоении значения переменной массива с пустыми скобками это значение просто добавляется в конец массива.
$a = "hello"; // $a == "hello" $a = "world"; // $a == "world"
Сортировтаь массивы можно с помощью функций asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort() и uksort() в зависимости от необходимого типа сортировки.
Подсчитать число элементов в массиве можно с помощью функции count().
Перемещаться по массиву можно с помощью функций next() и prev(). Еще один способ перемещения по массиву - использование функции each().


Преобразование типов
В PHP не требуется (и не поддерживается) явное определение типа при объявлении переменной; тип переменной определяется контекстом, в котором она используется. То есть если Вы назначите переменной var строковое значение, переменная var станет строкой. Если Вы назначите ей целое значение var, она станет целой.
Примером автоматического преобразования типов PHP является оператор сложения "+". Если какой-либо из операндов имеет двойную точность, все операнды оцениваютс как числа с двойной точностью, и результатом будет число с двойной точностью. В противном случае операнды будут интерпретироваться как целые и результат также будет целым числом. обратите внимание, типы самих операндов НЕ изменяются; изменяется только оценка операндов.
$foo = "0"; // $foo - строка "0" (ASCII 48) $foo++; // $foo - строка "1" (ASCII 49) $foo += 1; // $foo теперь целое число (2) $foo = $foo + 1.3; // $foo теперь - число с двойной точностью (3.3) $foo = 5 + "10 Little Piggies"; // $foo - целое (15) $foo = 5 + "10 Little Pigs"; // $foo - целое (15)
Если последние два примера кажутся Вам странными, см. раздел Преобразование строк.
Если Вы хотите, чтобы переменная обязательно имела определенный тип, обратитесь к разделу Приведение типа. Если Вы хотите изменить тип переменной, обратитесь к разделу settype().
Протестировать примеры из этого раздела можно, дополнив их следующей строкой:
echo "\$foo==$foo; тип " . gettype ($foo) . "
\n";
Примечание: Поведение автоматического преобразования в настоящий момент не определено.
$a = 1; // $a - целое $a = "f"; // $a становится массивом, в элементе $a хранится буква "f"
Хотя приведеная выше строка, кажется, должна явно приводить к тому, что $a станет массивом, первый элемент которого равен "f", рассмотрите следующий пример:
$a = "1"; // $a - строка $a = "f"; // Как насчет сдвига строк? Что произойдет?
Поскольку PHP поддерживает индексацию строк через сдвиг с использованием того же синтаксиса, что и для индексации массивов, приведенный выше пример вызовет проблему: станет ли $a массивом с первым элементом “f” или “f” станет первым символом строки $a?
По этой причине с PHP 3.0.12 и PHP 4.0b3-RC4 результат автоматического преобразования считается неопределенным. Идет обсуждение способов решения этой проблемы.


Приведение типов
Приведение типов в PHP действует, как в яызке C: имя нужного типа указывается в скобках перед приводимой переменной.
$foo = 10; // $foo - целое $bar = (double) $foo; // $bar имеет двойную точность
Допустимы следующие приведения:

  • (int), (integer) - приведение к integer
  • (real), (double), (float) - приведение к double
  • (string) - приведение к типу string
  • (array) - приведение к типу array
  • (object) - приведение к типу object

Обратите внимание, что в скобках допустимы табуляции и пробелы, так что следующие выражения эквивалентны:
$foo = (int) $bar; $foo = (int) $bar;
Иногда результат приведения двух типов неочевиден. Например, следует обратить внимание на следующее.
При приведении скалярной или строковой переменной в массив эта переменная станет первым элементом мссива:
$var = "ciao"; $arr = (array) $var; echo $arr; // на выходе: "ciao"
При преобразовании скалярной или строковой переменной в объект эта переменная становится атрибутом объекта; именем атрибута будет "scalar":
$var = "ciao"; $obj = (object) $var; echo $obj->scalar; // на выходе: "ciao"

Константы

имена констант
Константы - это идентификаторы простых значений. Исходя из их названия, нетрудно понять, что их значение не может изменяться в ходе выполнения скрипта (исключения представляют «волшебные» константы, которые на самом деле не являются константами в полном смысле этого слова). Имена констант чувствительны к регистру. По принятому соглашению, имена констант всегда пишутся в верхнем регистре.
Имя константы должно соответствовать тем же правилам, которыми руководствуются и другие имена в PHP. Правильное имя начинается с буквы или символа подчеркивания и состоит из букв, цифр и подчеркиваний. Регулярное выражение для проверки правильности имени константы выглядит так: *
Замечание: Понятие «буквы» здесь - это символы a-z, A-Z, и другие символы с ASCII-кодами от 127 до 255 (0x7f-0xff).


объявление констант
Вы можете определить константу с помощью функции define(). После того, как константа определена, ее значение не может быть изменено или аннулировано.
Константы могут содержать только скалярные данные (логического, целого, плавающего и строкового типов).
Получить значение константы можно, указав ее имя. В отличие от переменных, вам не потребуется предварять имя константы символом $. Также вы можете использовать функцию constant() для получения значения константы, если вы формируете имя константы динамически. Используйте функцию get_defined_constants() для получения списка всех объявленных констант.
Замечание: Константы и (глобальные) переменные находятся в разном пространстве имен. Это означает, что, например, TRUE и $TRUE являются совершенно разными вещами.
Если вы используете неопределенную константу, PHP предполагает, что вы имеете ввиду само имя константы, как если бы вы указали переменную типа строка (CONSTANT и “CONSTANT”). При этом будет сгенерирована ошибка типа E_NOTICE. Смотрите также главу руководства, которая разъясняет, почему $foo - это неправильно (конечно, если вы перед этим не объявили bar как константу с помощью define()). Если вы просто хотите проверить, определена ли константа, используйте функцию defined().


Различия между константами и переменными:

  • у констант нет приставки в виде знака доллара ($);
  • константы можно определить только с помощью функции define(), а не присваиванием значения;
  • константы могут быть определены и доступны в любом месте без учета области видимости;
  • константы не могут быть определены или аннулированы после первоначального объявления; и
  • константы могут иметь только скалярные значения.

Пример 13-1 . Определение констант


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


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


Таблица 13-1 . Некоторые «волшебные» константы PHP

Упрощенный вывод

До сих пор мы использовали команду echo для отображения информации, но это довольно громоздкая конструкция. В тех случаях, когда вывести нужно один элемент, существует более постой способ.
Для вывода данных в PHP существует оператор вывода, вы можете передать данные при помощи конструкции :
<?= PAGE_TITLE ?>

You entered:

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

Выражения PHP

Выражения - это краеугольный камень PHP. Почти все, что вы пишите в PHP, является выражением. Самое простое и точное определение выражения - «все что угодно, имеющее значение».
Основными формами выражений являются константы и переменные. Если вы записываете "$a = 5", вы присваиваете "5" переменной $a. "5", очевидно, имеет значение 5 или, другими словами, "5" это выражение со значением 5 (в данном случае "5" это целочисленная константа).
После этого присвоения вы ожидаете, что значением $a также является 5, поэтому, если вы написали $b = $a, вы полагаете, что работать это будет так же, как если бы вы написали $b = 5. Другими словами, $a это также выражение со значением 5. Если все работает верно, то именно так и произойдет.
Немного более сложными примерами выражений являются функции. Например, рассмотрим следующую функцию:

Исходя из того, что вы хорошо знакомы с концепцией функций (если нет, то прочитайте главу о функциях), вы полагаете, что запись
$c = foo() абсолютно эквивалента записи $c = 5, и вы правы. Функции - это выражения, значением которых является то, что возвращает функция. Поскольку foo() возвращает 5, значением выражения "foo()" является 5. Как правило, функции возвращают не просто статическое значение, а что-то вычисляют.
Разумеется, значения в PHP не обязаны быть целочисленными, и очень часто ими не являются. PHP поддерживает три типа скалярных значений: целочисленные, с плавающей точкой и строковые значения (скалярными являются значения, которые вы не можете "разбить" на меньшие части, в отличие, например, от массивов). PHP поддерживает также два комбинированных (не скалярных) типа: массивы и объекты. Каждый из этих типов значений может присваиваться переменной или возвращаться функцией.
До сих пор пользователи PHP/FI 2 не должны были почувствовать каких-либо изменений. Однако PHP, как и многие другие языки, понимает гораздо больше выражений. PHP - это язык, ориентированный на выражения и рассматривающий почти все как выражение. Вернемся к примеру, с которым мы уже имели дело: "$a = 5". Легко заметить, что здесь присутствуют два значения - значение целочисленной константы "5" и значение переменной $a, также принимающей значение 5. Но на самом деле здесь присутствует и еще одно значение - значение самого присвоения. Само присвоение вычисляется в присвоенное значение, в данном случае - в 5. На практике это означает, что "$a = 5", независимо от того, что оно делает, является выражением со значением 5. Таким образом, запись "$b = ($a = 5)" равносильна записи "$a = 5; $b = 5;" (точка с запятой обозначает конец выражения). Поскольку операции присвоения анализируются справа налево, вы также можете написать "$b = $a = 5".
Другой хороший пример ориентированности на выражения - пре- и постфиксный инкремент и декремент. Пользователи PHP/FI 2 и многих других языков возможно уже знакомы с формой записи переменная++ и переменная--. Это операторы инкремента и декремента. В PHP/FI 2 операция ""$a "" не имеет значения (это не выражение), и, таким образом, вы не можете присвоить ее или каким-либо образом использовать. PHP увеличивает возможности инкремента/декремента, также сделав их выражениями, как в C. Также как и C, PHP поддерживает два типа инкремента - префиксный и постфиксный. Они оба инкрементируют значение переменной и эффект их действия на нее одинаков. Разница состоит в значении выражения инкремента. Префиксный инкремент, записываемый как " $variable", вычисляется в инкрементированное значение (PHP инкрементирует переменную перед тем как прочесть ее значение, отсюда название "пре-инкремент"). Постфиксный инкремент, записываемый как "$variable++", вычисляется в первоначальное значение переменной $variable перед ее приращением (PHP инкрементирует переменную после прочтения ее значения, отсюда название "пост-инкремент").
Очень распространенным типом выражений являются выражения сравнения. Они вычисляются в 0 или 1, означающих соответственно FALSE (ложь) или TRUE (истину). PHP поддерживает > (больше), >= (больше либо равно), == (равно), != (не равно), < (меньше) и <= (меньше либо равно). Он также поддерживает операторы строгого равенства: === (равно и одного типа) и!== (не равно или не одного типа). Чаще всего эти выражения используются в условиях выполнения операторов, таких как if.
Последний пример выражений, который мы здесь рассмотрим, это смешанные выражения операции и присвоения. Вы уже знаете, что если вы хотите увеличить $a на 1, вы можете просто написать "$a " или " $a". Но что, если вы хотите прибавить больше, чем единицу, например, 3? Вы могли бы написать "$a++" много раз, однако, очевидно это не очень рациональный или удобный способ. Гораздо более распространенной практикой является запись вида "$a = $a + 3". "$a + 3" вычисляется в значение $a плюс 3 и снова присваивается $a, увеличивая в результате $a на 3. В PHP, как и в некоторых других языках, таких как C, вы можете записать это более коротким образом, что увеличит очевидность смысла и быстроту понимания кода по прошествии времени. Прибавить 3 к текущему значению $a можно с помощью записи "$a += 3". Это означает дословно «взять значение $a, прибавить к нему 3 и снова присвоить его переменной $a». Кроме большей понятности и краткости, это быстрее работает. Значением "$a += 3", как и обычного присвоения, является присвоенное значение. Обратите внимание, что это НЕ 3, а суммированное значение $a плюс 3 (то, что было присвоено $a). Таким образом может использоваться любой двухместный оператор, например, "$a -= 5" (вычесть 5 из значения $a), "$b *= 7" (умножить значение $b на 7) и т.д.
Существует еще одно выражение, которое может выглядеть необычным, если вы не встречали его в других языках - тернарный условный оператор:

Если значением первого подвыражения является TRUE (не ноль), выполняется второе подвыражение, которое и будет результатом условного выражения. В противном случае, будет выполнено третье подвыражение и его значение будет результатом.
Следующий пример должен помочь вам немного улучшить понимание префиксного и постфиксного инкремента и выражений:

Некоторые выражения могут рассматриваться как инструкции. В данном случае инструкция имеет вид "выражение" ";" - выражение с последующей точкой с запятой. В записи "$b=$a=5;", $a=5 - это верное выражение, но само по себе не инструкция. Тогда как "$b=$a=5;" является верной инструкцией.
Последнее, что стоит упомянуть, это истинность значения выражений. Во многих случаях, как правило, в условных операторах и циклах, вас может интересовать не конкретное значение выражения, а только значат ли они TRUE или FALSE. Константы TRUE и FALSE (регистро-независимые) - это два возможных булевых значения. При необходимости выражение автоматически преобразуется в булев тип. Подробнее о том, как это происходит, смотрите в разделе о приведении типов.
PHP предоставляет полную и мощную реализацию выражений, и их полное документирование выходит за рамки этого руководства. Вышеприведенные примеры должны дать вам представление о том, что они из себя представляют и как вы сами можете создавать полезные выражения. Далее, для обозначения любого верного выражения PHP в этой документации мы будем использовать сокращение expr.

Операторы PHP

Оператором называется нечто, состоящее из одного или более значений (выражений, если говорить на жаргоне программирования), которое можно вычислить как новое значение (таким образом, вся конструкция может рассматриваться как выражение). Отсюда следует, что функции или любые другие конструкции, которые возвращают значение (например, print()) являются операторами, в отличие от всех остальных языковых конструкций (например, echo()), которые ничего не возвращают.
Операторы бывают трех видов. Во-первых, это унарные операторы, которые работают только с одним аргументом, например, ! (оператор отрицания) или ++ (инкримент). Вторую группу составляют бинарные операторы: в нее входят большинство поддерживаемых в PHP операторов, полный список которых вы можете найти в разделе Порядок выполнения операторов.
И последнюю, третью группу составляет тернарный оператор?:. Он используется для условного выбора между двумя операторами, в зависимости от результата вычисления третьего оператора. Говоря другими словами, он позволяет определить две альтернативные ветви дальнейшего выполнения. Тернарный оператор рекомендуется заключать в круглые скобки.


Приоритет выполнения операторов
Приоритет операторов определяет, насколько «тесно» связанны между собой два выражения. Например, выражение 1 + 5 * 3 вычисляется как 16, а не 18, поскольку операция умножения ("*") имеет более высокий приоритет, чем операция сложения ("+"). В случае, если операторы имеют одинаковый приоритет, они будут выполняться слева направо. Круглые скобки могут использоваться для принудительного указания необходимого порядка выполнения операторов. Например, выражение (1 + 5) * 3 вычисляется как 18.
В следующей таблице приведен список операторов, отсортированный по убыванию их приоритетов. Операторы, размещенные в одной строке имеют одинаковый приоритет и порядок их выполнения опроделяется исходя из их ассоциативности.


Таблица 15-1 . Порядок выполнения операторов

Ассоциативность Оператор
неассоциативна new
правая [
неассоциативна ++ --
неассоциативна ! ~ - (int) (float) (string) (array) (object) @
левая * / %
левая + - .
левая << >>
неассоциативна < <= > >=
неассоциативна == != === !==
левая &
левая ^
левая |
левая &&
левая ||
левая ? :
правая = += -= *= /= .= %= &= |= ^= <<= >>=
левая and
левая xor
левая or
левая ,

Левая ассоциативность подразумевает, что выражение вычисляется слева направо, правая ассоциативность соответственно подразумевает противоположный порядок. Пример 15-1 . Ассоциативность
$a = 5, $b = 5 ?>
Вы можете использовать круглые скобки для повышения читабельности кода.
Замечание: Несмотря на то, что оператор! имеет более высокий приоритет чем =, PHP позволяет использовать следующую конструкцию: if (!$a = foo()), которая присваивает переменной $a результат выполнения функции foo().


Арифметические операторы
Помните школьные основы арифметики? Описанные ниже операторы работают так же.


Таблица 15-2 . Арифметические операции

Пример Название Результат
-$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.
Также вы можете ознакомиться с разделом документации Математические функции.


Битовые операторы
Побитовые операторы позволяют устанавливать конкретные биты в 0 или 1 для целочисленных значений. В случае если и левый, и правый операнды строки, побитовые операции будут работать с их ASCII-представлениями.


Таблица 15-3 . Побитовые операторы

Пример Название Результат
$a & $b Побитовое "и" Устанавливаются только те биты, которые установлены и в $a, и в $b.
$a | $b Побитовое "или" Устанавливаются те биты, которые установлены либо в $a, либо в $b.
$a ^ $b Исключающее или Устанавливаются только те биты, которые установлены либо только в $a, либо только в $b
~ $a Отрицание Устанавливаются те биты, которые в $a не установлены, и наоборот.
$a << $b Сдвиг влево Все биты переменной $a сдвигаються на $b позиций влево (каждая позиция подразумевает "умножение на 2")
$a >> $b Сдвиг вправо Все биты переменной $a сдвигаються на $b позиций вправо (каждая позиция подразумевает "деление на 2")

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


Логические операторы
Таблица 15-6 . Логические операторы

Смысл двух разных вариантов для операторов “and” и “or” в том, что они работают с различными приоритетами (смотрите таблицу Приоритет выполнения операторов).

Базовый синтаксис PHP

Условный оператор if-then-else, альтернативный синтаксис

Оператор if
Это один из самых важных операторов многих языков, включая PHP. Он позволяет выполнять фрагменты кода в зависимости от условия. Структуру оператора if можно представить следующим образом:
if (выражение) блок_выполнения
Здесь выражение есть любое правильное PHP-выражение (т.е. все, что имеет значение). В процессе обработки скрипта выражение преобразуется к логическому типу. Если в результате преобразования значение выражения истинно (True), то выполняется блок_выполнения. В противном случае блок_выполнения игнорируется. Если блок_выполнения содержит несколько команд, то он должен быть заключен в фигурные скобки { }.


Правила преобразования выражения к логическому типу:

  1. В FALSE преобразуются следующие значения:
  • логическое False
  • целый ноль (0)
  • действительный ноль (0.0)
  • пустая строка и строка “0”
  • массив без элементов
  • объект без переменных (подробно об объектах будет рассказано в одной из следующих лекций)
  • специальный тип NULL
  1. Все остальные значения преобразуются в TRUE.

Пример 3.1. Условный оператор if (html, txt)
100*$bax+3) echo "Эта строчка не появится на экране, так как условие не выполнено"; ?>


Оператор else
Мы рассмотрели только одну, основную часть оператора if. Существует несколько расширений этого оператора. Оператор else расширяет if на случай, если проверяемое в if выражение является неверным, и позволяет выполнить какие-либо действия при таких условиях.
Структуру оператора if, расширенного с помощью оператора else, можно представить следующим образом:
if (выражение) блок_выполнения else блок_выполнения1
Эту конструкцию if...else можно интерпретировать примерно так: если выполнено условие (т.е. выражение=true), то выполняем действия из блока_выполнения, иначе – действия из блока_выполнения1. Использовать оператор else не обязательно.
Посмотрим, как можно изменить предыдущий пример, учитывая необходимость совершения действий и в случае невыполнения условия.


Пример 3.2. Оператор else (html, txt)
100*$bax+3) echo "Эта строка не появится на экране, так как условие не выполнено"; else echo "Зато появится эта строка!"; ?>


Оператор elseif
Еще один способ расширения условного оператора if – использование оператора elseif. elseif – это комбинация else и if. Как и else, он расширяет if для выполнения различных действий в том случае, если условие, проверяемое в if, неверно. Но в отличие от else, альтернативные действия будут выполнены, только если elseif-условие является верным. Структуру оператора if, расширенного с помощью операторов else и elseif, можно представить следующим образом:
if (выражение) блок_выполнения elseif(выражение1) блок_выполнения1 ... else блок_выполненияN
Операторов elseif может быть сразу несколько в одном if-блоке. Elseif-утверждение будет выполнено, только если предшествующее if-условие является False, все предшествующие elseif-условия являются False, а данное elseif-условие – True.


Альтернативный синтаксис
PHP предлагает альтернативный синтаксис для некоторых своих управляющих структур, а именно для if, while, for, foreach и switch. В каждом случае открывающую скобку нужно заменить на двоеточие (:), а закрывающую – на endif;, endwhile; и т.д. соответственно.
Например, синтаксис оператора if можно записать таким образом:
if(выражение): блок_выполнения endif;
Смысл остается тем же: если условие, записанное в круглых скобках оператора if, оказалось истиной, будет выполняться весь код, от двоеточия «:» до команды endif;. Использование такого синтаксиса полезно при встраивании php в html-код.


Пример 3.4. Использование альтернативного синтаксиса (html, txt)
Привет, Ваня!
Если используются конструкции else и elseif, то также можно задействовать альтернативный синтаксис:


Оператор switch
Еще одна конструкция, позволяющая проверять условие и выполнять в зависимости от этого различные действия, – это switch. На русский язык название данного оператора можно перевести как «переключатель». И смысл у него именно такой. В зависимости от того, какое значение имеет переменная, он переключается между различными блоками действия. switch очень похож на оператор if...elseif...else или набор операторов if. Структуру switch можно записать следующим образом:
switch (выражение или переменная){ case значение1: блок_действий1 break; case значение2: блок_действий2 break; ... default: блок_действий_по_умолчанию }
В отличие от if, здесь значение выражения не приводится к логическому типу, а просто сравнивается со значениями, перечисленными после ключевых слов case (значение1, значение 2 и т.д.). Если значение выражения совпало с каким-то вариантом, то выполняется соответствующий блок_действий – от двоеточия после совпавшего значения до конца switch или до первого оператора break, если таковой найдется. Если значение выражения не совпало ни с одним из вариантов, то выполняются действия по умолчанию (блок_действий_по_умолчанию), находящиеся после ключевого слова default. Выражение в switch вычисляется только один раз, а в операторе elseif – каждый раз, поэтому, если выражение достаточно сложное, то switch работает быстрее.


Пример 3.3 можно переписать с использованием switch следующим образом:

Если в этом примере опустить оператор break, например, в case «Петр»:, то, если переменная окажется равной строке «Петр», после вывода на экран сообщения «Привет, Петя!» программа пойдет дальше и выведет также сообщение «Привет, Сеня!» и только потом, встретив break, продолжит свое выполнение за пределами switch.
Для конструкции switch, как и для if, возможен альтернативный синтаксис, где открывающая switch фигурная скобка заменяется двоеточием, а закрывающая – endswitch; соответственно.

Операторы цикла: for, while, foreach, варианты синтаксиса

for
Циклы for это самые сложные циклы PHP. Они ведут себя так же, как их аналоги из C.
Синтаксис цикла for таков: for (expr1; expr2; expr3) statement
Первое выражение (expr1) вычисляется (выполняется) один раз и безусловно в начале выполнения цикла.
При начале каждой итерации вычисляется expr2. Если оно вычисляется в TRUE, цикл продолжается и выполняется вложенный (-ые) оператор (-ы). Если оно вычисляется в FALSE, выполнение цикла прекращается.
В конце каждой итерации вычисляется (выполняется) expr3.
Каждое из выражений может быть пустым. Пустое expr2 означает, что цикл должен выполняться бесконечно (PHP неявно предполагает, что это условие TRUE, как в C). Это может быть не так бессмысленно, как может показаться, поскольку часто бывает необходимо закончить цикл оператором break вместо использования проверки выражения-условия цикла for.
Рассмотрим следующие примеры. Все они выводят числа от 1 до 10:
/* пример 1 */ for ($i = 1; $i <= 10; $i++) { print $i; } /* пример 2 */ for ($i = 1;;$i++) { if ($i > 10) { break; } print $i; } /* пример 3 */ $i = 1; for (;;) { if ($i > 10) { break; } print $i; $i++; } /* пример 4 */ for ($i = 1; $i <= 10; print $i, $i++);
Конечно, первый пример кажется самым привлекательным (или, возможно, четвёртый), но вы можете обнаружить, что возможность использовать пустые выражения в циклах for оказывается удобной во многих ситуациях.
PHP также поддерживает «синтаксис colon/с двоеточием» для циклов for.
for (expr1; expr2; expr3): statement; ...; endfor;


while
Циклы while это простейшие циклы PHP. Они ведут себя, как их аналоги из C.
Вот базовая форма оператора while: while (expr) statement
Значение оператора while просто как 3 (три) рубля. Он говорит PHP, что нужно неоднократно выполнять вложенный оператор (-ы), пока выражение expr вычисляется в TRUE. Значение выражения проверяется каждый раз в начале цикла, поэтому, если это значение изменилось при выполнении вложенного оператора (-ов), выполнение не остановится до конца данной итерации (каждый раз, когда PHP выполняет все операторы цикла, называется одной итерацией цикла). Иногда, если выражение expr вычисляется в FALSE в самом начале цикла, вложенный оператор (-ы) может быть не выполнен ни разу.
Как и в операторе if, вы можете создавать блок из операторов внутри цикла while с помощью фигурных скобок {} или используя альтернативный синтаксис: while (expr): statement ... endwhile;
Следующие примеры идентичны и оба печатают числа от 1 до 10:
/* пример 1 */ $i = 1; while ($i <= 10) { print $i++; /* будет печататься значение $i до инкремента (пост-инкремент) */ } /* пример 2 */ $i = 1; while ($i <= 10): print $i; $i++; endwhile;


do..while
Циклы do..while очень похожи на циклы while, но условное выражение проверяется в конце каждой итерации, а не в начале. Главное отличие от регулярных циклов while состоит в том, что первая итерация цикла do..while всегда выполняется (условие проверяется только в конце итерации), а в цикле while этого может и не быть (условие проверяется в начале каждой итерации и, если вычисляется в FALSE сразу в начале, выполнение цикла немедленно прерывается).
Для циклов do..while существует один вариант синтаксиса:
$i = 0; do { print $i; } while ($i>0);
Вышеприведённый цикл будет пройден точно один раз, поскольку после первого прохода проверка условного выражения даёт FALSE ($i не больше 0), и выполнение цикла завершается.
Продвинутые пользователи C могут быть знакомы с другим вариантом использования цикла do..while, когда разрешается остановка выполнения в середине блоков кода путём инкапсуляции их в do..while(0) и использования оператора break. Следующий фрагмент демонстрирует это:
do { if ($i < 5) { print "i is not big enough"; break; } $i *= $factor; if ($i < $minimum_limit) { break; } print "i is ok"; ...обработка i... } while(0);
Не волнуйтесь, если вы здесь не поняли ничего или почти ничего. Вы можете кодировать скрипты и даже полноценные приложения без использования этой "возможности".


foreach
В PHP 4 (не в PHP 3) имеется конструкция foreach, напоминающая аналоги из Perl и некоторых других языков. Она даёт простой способ итерировать по массиву. Есть два вида синтаксиса: второй является расширением первого и используется реже:
foreach(array_expression as $value) statement
foreach(array_expression as $key => $value) statement
Первый вид циклически проходит по массиву, заданному в array_expression. При каждом проходе значение текущего элемента присваивается переменной $value, а внутренний указатель массива передвигается на единицу (поэтому при следующем проходе вы просмотрите значение следующего элемента).
Второй вид выполняет то же самое, но ключ/key текущего элемента присваивается переменной $key.
Примечание: при старте foreach внутренний указатель массива автоматически устанавливается на первый элемент массива. Это означает, что вам не нужно вызывать reset() перед началом выполнения цикла foreach.
Примечание: обратите также внимание, что foreach работает с копией специфицированного массива, а не с самим массивом, следовательно, указатель массива не изменяется, как при работе конструкции each(), и изменения в возвращаемом элементе массива не влияют на массив-оригинал.
Примечание: foreach не поддерживает возможность подавления сообщений об ошибках с использованием "@".
Заметьте, что следующие варианты функционально идентичны:
reset ($arr); while (list(, $value) = each ($arr)) { echo "Value: $value
\n"; } foreach ($arr as $value) { echo "Value: $value
\n"; }
Следующие варианты также функционально идентичны:
reset ($arr); while (list($key, $value) = each ($arr)) { echo "Key: $key; Value: $value
\n"; } foreach ($arr as $key => $value) { echo "Key: $key; Value: $value
\n"; }
Ещё несколько примеров использования:
/* foreach пример 1: только value */ $a = array (1, 2, 3, 17); foreach ($a as $v) { print "Current value of \$a: $v.\n"; } /* foreach пример 2: value (с key, выводимым для иллюстрации) */ $a = array (1, 2, 3, 17); $i = 0; /* только для иллюстрации */ foreach($a as $v) { print "\$a[$i] => $v.\n"; $i++; } /* foreach пример 3: key\ключ и value\значение */ $a = array ("one" => 1, "two" => 2, "three" => 3, "seventeen" => 17); foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; }


break
break заканчивает выполнение текущей структуры (цикла) for, foreach, while, do..while или switch.
break принимает необязательный числовой аргумент, указывающий, сколько содержащих вкладывающих структур прерывают выполнение.
$arr = array ("one", "two", "three", "four", "stop", "five"); while (list (, $val) = each ($arr)) { if ($val == "stop") { break; /* Вы можете также записать "break 1;" */ } echo "$val
\n"; } /* Использование необязательного аргумента. */ $i = 0; while (++$i) { switch ($i) { case 5: echo "At 5
\n"; break 1; /* Выход только из switch. */ case 10: echo "At 10; quitting
\n"; break 2; /* Выход из switch и из while. */ default: break; } }


continue
continue используется в циклических структурах для пропуска оставшейся части текущей итерации цикла и продолжения выполнения с начала следующей итерации (прохода) цикла.
continue принимает необязательный числовой аргумент, который указывает, сколько уровней содержащих циклов нужно пропустить до конца.
while (list ($key, $value) = each ($arr)) { if (!($key % 2)) { // пропустить нечётные члены continue; } do_something_odd ($value); } $i = 0; while ($i++ < 5) { echo "Outer
\n"; while (1) { echo "& & Middle
\n"; while (1) { echo "& & Inner
\n"; continue 3; } echo "This never gets output.
\n"; } echo "Neither does this.
\n"; }

Включение кода из файлов: зачем нужно включение кода из файлов, какие файлы можно включать, операторы включения require, include, предупреждение возникновения дубликатов (include_once, require_once)

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


Файлы для включения
Начнем работу с создания файла, который будет впоследствии использоваться в операторе включения. Как бы ни выглядела ваша Web-страница, у нее должен быть заголовок и нижний колонтитул, в которых содержатся элементы навигации. Мы поместим заголовок в отдельный файл и затем будем включать его в большое число страниц, все они будут выглядеть однотипно. Если мы захотим внести изменения во внешний вид наших страниц, то нам надо будет сделать это только один раз.
Для начала создадим файл с именем top.txt и включим в него следующий текст:
Workflow System

The Workflow System

Navigation

Register


Во второй файл, который мы назовем bottom.txt, добавьте следующие строки:

Сохраните файлы в том же каталоге, где уже находится файл registration.php.


Оператор включения include
Теперь включим созданные нам файлы в страницу регистрации. Внесите в файл registration.php следующие изменения:

Register for an Account:

Username:
Email:
Password:
Password (again):

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


Оператор включения require
Если PHP не может найти файла заголовка или нижнего колонтитула, то это плохо, но не катастрофично, приложение все равно будет работать. Если отсутствует файл, указанный в операторе include, PHP выводит предупреждение и продолжает обработку страницы.
Однако в некоторых случаях отсутствие включаемого файла является катастрофой. Например, мы могли решить, что полезно поместить описание функций validate() и db_connect() в отдельный файл и затем включить этот файл в registration_action.php при помощи оператора include. Если PHP не сможет найти файла с функциями, но не прекратит работу, то возникнет масса проблем. Для того чтобы предотвратить эту ситуацию, следует использовать оператор require вместо include:

You entered:

$value) { echo "

".$key." = " . $value . "

"; } $passwords = $_POST["pword"]; echo "First password = ".$passwords; echo "
"; echo "Second password = ".$passwords; if (validate($_POST) == "OK") { echo "

Thank you for registering!

"; ...
В целом оператор require работает также, как и include, но если PHP не может найти включаемого файла, то он сообщает о фатальной ошибке и выполнение скрипта прекращается.


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

You entered:

$value) { echo "

".$key." = " . $value . "

"; } ...
Когда PHP встречает операторы include_once или require_once, то происходит проверка, не было ли включения указанных файлов ранее, таким образом предупреждается включение файлов-дубликатов.

Общие понятия

Язык PHP специально предназначен для веб-программирования. PHP сочетает достоинства языков C и Perl и при этом весьма прост в изучении и обладает значительными преимуществами перед традиционными языками программирования.

Синтаксис PHP очень напоминает синтаксис языка C и во многом заимствован из таких языков как Java и Perl.

Программист С очень быстро освоит язык PHP и сможет использовать его с максимальной эффективностью.
В принципе, в PHP есть практически все операторы и функции , имеющиеся в стандартном GNU С (или их аналоги), например есть циклы (while, for), операторы выбора (if, switch), функции работы с файловой системой и процессами (fopen, *dir, stat, unlink, popen, exec), функции ввода-вывода (fgets,fputs,printf) и множество других...

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

PHP и HTML

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



Пример

echo "Привет, я - скрипт PHP!" ;
?>


Вы уже наверняка заметили, что это классический скрипт, с которого начинают изучение языка программирования.

Обратите внимание, что HTML-код корректно обрабатывается интерпретатором PHP.

Начало сценария вас может озадачить: разве это сценарий? Откуда HTML-тэги и ? Вот тут-то и кроется главная особенность (кстати, чрезвычайно удобная) языка PHP: PHP-скрипт может вообще не отличаться от обычного HTML-документа.

Идем дальше. Вы, наверное, догадались, что сам код сценария начинается после открывающего тэга и заканчивается закрывающим ?> . Итак, между этими двумя тэгами текст интерпретируется как программа, и в HTML-документ не попадает. Если же программе нужно что-то вывести, она должна воспользоваться оператором echo.

Итак, PHP устроен так, что любой текст, который расположен вне программных блоков, ограниченных и ?> , выводится в браузер непосредственно. В этом и заключается главная особенность PHP, в отличие от Perl и C, где вывод осуществляется с помощью стандартных операторов.

Разделение инструкций

Инструкции разделяются также как и в C или Perl - каждое выражение заканчивается точкой с запятой.

Закрывающий тег (?>) также подразумевает конец инструкции, поэтому два следующих фрагмента кода эквиваленты:

echo "Это тест" ;
?>

Комментарии в PHP скриптах

Написание практически любого скрипта не обходится без комментариев.

PHP поддерживает комметарии в стиле "C", "C++" и оболочки Unix. Например:

echo "Это тест" ; // Это однострочный комментарий в стиле c++
/* Это многострочный комментарий
еще одна строка комментария */
echo "Это еще один тест" ;
echo "Последний тест" ; # Это комментарий в стиле оболочки Unix
?>

Однострочные комментарии идут только до конца строки или текущего блока PHP-кода, в зависимости от того, что идет перед ними.

Это пример.


Заголовок вверху выведет "Это пример".

Будьте внимательны, следите за отсутствием вложенных "C"-комментариев, они могут появиться во время комментирования больших блоков:

/*
echo "Это тест"; /* Этот комментарий вызовет проблему */
*/
?>

Однострочные комментарии идут только до конца строки или текущего блока PHP-кода, в зависимости от того, что идет перед ними. Это означает, что HTML-код после // ?> БУДЕТ напечатан: ?> выводит из режима PHP и возвращает в режим HTML, но // не позволяет этого сделать.

Переменные в PHP

Имена переменных обозначаются знаком $ . То же самое "Привет, я - скрипт PHP! " можно получить следующим образом:

$ message = "Привет, я - скрипт PHP!" ;
echo $ message ;
?>

Типы данных в PHP

PHP поддерживает восемь простых типов данных:

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

Boolean (двоичные данные)
- integer (целые числа)
- float (числа с плавающей точкой или "double")
- string (строки)

Два смешанных типа:

Array (массивы)
- object (объекты)

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

resource (ресурсы)
NULL ("пустые")

Существуют также несколько псевдотипов:

Mixed (смешанные)
- number (числа)
- callback (обратного вызова)

Подробно о типах данных в PHP

Выражения в PHP

Основными формами выражений являются константы и переменные. Например, если вы записываете "$a = 100", вы присваиваете "100" переменной $a:

В приведенном примере $a - это переменная, = - это оператор присваивания, а 100 - это и есть выражения. Его значение 100.

Выражением может быть и переменная, если ей сопоставлено определенное значение:

$x = 7;
$y = $x;

В первой строке рассмотренного примера выражением является константа 7, а во второй строке - переменная $x, т.к. ранее ей было присвоено значение 7. $y = $x также является выражением.

Подробно о выражениях в PHP вы найдете

Операторы PHP

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

Примеры операторов PHP:

Операторы присвоения:

$a = ($b = 4 ) + 5 ; // результат: $a установлена значением 9, переменной $b присвоено 4.

?>

Комбинированные операторы:

$a = 3 ;
$a += 5 ; // устанавливает $a значением 8, аналогично записи: $a = $a + 5;
$b = "Hello " ;
$b .= "There!" ; // устанавливает $b строкой "Hello There!", как и $b = $b . "There!";

?>

Строковые операторы:

$a = "Hello " ;
$b = $a . "World!" ; // $b содержит строку "Hello World!"

$a = "Hello " ;
$a .= "World!" ; // $a содержит строку "Hello World!"
?>

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

Подробную информацию по операторам PHP вы найдете .

Управляющие конструкции языка PHP

Основными конструкциями языка PHP являются:

  1. Условные операторы (if, else);
  2. Циклы (while, do-while, for, foreach, break, continue);
  3. Конструкции выбора (switch);
  4. Конструкции объявления (declare);
  5. Конструкции возврата значений (return);
  6. Конструкции включений (require, include).

Примеры конструкций языка PHP:

if ($a > $b ) echo "значение a больше, чем b" ;
?>

Приведенный пример наглядно показывает использование конструкции if совместно с оператором сравнения ($a > $b).

В следующем примере если переменная $a не равна нулю, будет выведена строка "значение a истинно (true), то есть показано взаимодействие условного оператора (конструкции) if с логическим оператором:

if ($a ) echo "значение a истинно (true) " ;
?>

А вот пример цикла while:

$ x = 0 ;
while ($ x ++< 10 ) echo $ x ;
// Выводит 12345678910
?>

Информацию по всем управляющим конструкциям PHP вы можете получить

Пользовательские функции в PHP

В любом языке программирования существуют подпрограммы. В языке C они называются функциями, в ассемблере - подпрограммами, а в Pascal существуют два вида подпрограмм: процедуры и функции.

В PHP такими подпрограммами являются.

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

Приведем пример пользовательской функции на PHP:

function funct () {
$a = 100 ;
echo "

$a

" ;
}
funct ();

?>

Сценарий выводит 100:

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

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

Встроенные (стандартные) функции PHP

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

ООП и PHP

PHP имеет достаточно хорошую поддержку объектно-ориентированного программирования (ООП).

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

Вот пример PHP класса и его использования:

// Создаем новый класс Coor:
class Coor {
// данные (свойства):
var $ name ;

// методы:
function Getname () {
echo "

John

" ;
}

}

// Создаем объект класса Coor:
$ object = new Coor ;
// Получаем доступ к членам класса:
$ object -> name = "Alex" ;
echo $ object -> name ;
// Выводит "Alex"

Есть еще вопросы или что-то непонятно - добро пожаловать на наш

» Синтаксис языка PHP

Навигация по Самоучителю: 1.1 О PHP 1.2 История PHP 1.3 Почему именно PHP? 1.4 Как это все (PHP) работает? 1.5 От интерпретатора к компилятору 1.6 Возможности PHP 1.7 Что необходимо для работы? 1.8 Ответы на ваши вопросы 1.9 Заключение к главе 2.1 Установка и конфигурирование 2.2 Установка Apache 2.3 Установка PHP 2.4 Установка MySQL 2.5 Настройка Apache 2.6 Настройка PHP 2.7 Настройка MySQL 2.8 Тестирование программ Apache, PHP 2.9 Заключение к главе 2 3.1 Синтаксис языка PHP 3.2 Профессиональная вставка 3.3 РНР и HTML 3.4 Комментарии в языке (коде) PHP 3.5 Оформление PHP кода программы 3.6 Заключение к главе 3 4.1 Переменные. Что такое переменные? 4.2 Переменные. Типы данных в PHP 4.3 Integer. Тип данных. 4.4 Double. Тип данных. 4.5 Boolean. Тип данных. 4.6 Другие типы данных 4.7 Определение переменных в PHP 4.8 Изменение типа данных в PHP 4.9 Ссылки на переменные в PHP 4.10 Динамические переменные в PHP 4.11 Что такое Константы в PHP? 4.12 Определение констант в языке PHP 4.13 Предопределенные константы в языке PHP 4.14 Заключение к главе 4 5.1 Операторы в PHP 5.2 Оператор присваивания в PHP 5.3 Арифметические операторы в PHP 5.4 Операторы отношения в PHP 5.5 Логические операторы в PHP 5.6 Поразрядные операторы в PHP 5.7 Строковые операторы в PHP 5.8 Оператор подавления ошибок в PHP 5.9 Операторы увеличения и уменьшения в PHP 5.10 Сокращенная запись присвоения переменных в PHP 5.11 Приоритетность и ассоциативность в PHP 5.12 Заключение к главе 5 6.1 Управляющие операторы PHP 6.2 Условный оператор IF 6.3 Условный оператор Elseif 6.4 Условный оператор Switch 6.5 Операторы цикла For 6.6 Оператор цикла While 6.7 Оператор цикла Do...while 6.8 Безусловный оператор Break 6.9 Безусловный оператор Continue 6.10 Безусловный оператор Exit 6.11 Require 6.12 Include 6.13 Заключение к главе 6 7.1 Функции в PHP 7.2 Определение функций в PHP 7.3 Аргументы функций в PHP 7.4 Область видимости переменных 7.5 Время жизни переменных в PHP 7.6 Рекурсия в PHP 7.7 Динамический вызов функций в PHP 7.8 Заключение к главе 7 8.1 Массивы в PHP 8.2 Присвоение значений массивов PHP 8.3 Функция array () PHP 8.4 Вывод PHP массивов 8.5 Обход массивов PHP. Функция count(), Конструкции foreach() 8.6 Функция reset() 8.7 each() 8.8 list() 8.9 Сложение массивов 8.10 Сравнение массивов 8.11 Добавление элементов массива 8.12 Удаление элементов массива 8.13 Сортировка массивов 8.14 Многомерные массивы 8.15 Преобразование в массив 8.16 Заключение к главе 8 9.1 Строка 9.2 Обработка переменных внутри строк 9.3 Вывод строк 9.4 Форматированный вывод строк 9.5 Длина строки в PHP 9.6 Поиск подстроки в строке 9.7 Чистка строк 9.8 Заключение к главе 9 10.1 Работа с HTML-формами 10.2 Передача данных HTML-формы. Метод GET и POST 10.3 Получение данных в PHP 10.4 Суперглобальные массивы $_GЕТ и $_POST 10.5 Заключение к главе 10 11.1 Открытие файлов в PHP 11.2 Закрытие файлов в PHP 11.3 Чтение и запись файлов в PHP 11.4 Копирование, удаление и переименование файлов в PHP 11.5 Получение информации о файлах в PHP 11.6 Файловый указатель в PHP 11.7 Открытие и закрытие каталогов в PHP 11.8 Чтение каталогов в PHP 11.9 Создание и удаление каталогов в PHP 11.10 Заключение к главе 11 12.1 Работа с базами данных MySQL в PHP 12.2 Соединение PHP с сервером базы данных MySQL 12.3 Создание и удаление базы данных MySQL 12.4 Создание и удаление таблиц MySQL 12.5 Работа с данными MySQL 12.6 Заключение к главе 12 13.1 Работа с изображениями в PHP. Библиотека GD 13.2 Создание и вывод изображений в PHP 13.3 Модификация изображений в PHP 13.4 Работа с текстом в PHP 13.5 Заключение к главе 13 14.1 Работа с датой и временем в PHP 14.2 Символы форматирования даты и времени в PHP 14.3 Функция date() и getdate() в PHP 14.4 Преобразования к абсолютному времени в PHP 14.5 Заключение к главе 14 15.1 Работа с регулярными выражениями в PHP 15.2 Регулярные выражения POSIX в PHP 15.3 Метасимволы в PHP 15.4 Классы символов 15.5 Квантификаторы 15.6 Замена по шаблону 15.7 Примеры регулярных выражений 15.8 Заключение к главе 15 16.1 Работа с Cookies в PHP 16.2 Создание Cookies в PHP 16.3 Чтение из Cookies 16.4 Удаление Cookies 16.5 Заключение к главе 16

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

Как было сказано в главе 1, скрипт на РНР - это простейший текст. И именно поэтому, когда вы его создаете, вы можете использовать простой редактор текста (к примеру, блокнот Windows). Мы не будем откладывать это дело в очень долгий ящик и начнем писать программу. По традиции, результатом ее работы будет сообщение «Hello, World!» в окне вашего браузера. Вам нужно открыть редактор текста, и ввести туда строки из листинга 3.1 и сохранить этот файл с расширением.php (к примеру, hello.php). Разместить файл в корень каталога вашего Web-сервера (в нашем случае это C:\Home_server\Apache2\htdocs\) и введите в строке браузера http://localhost/hello.php. Перед нажатием клавиши Enter, еще раз убедитесь, что процесс Apache загружен, это подтверждает иконка Apache Server Monitor, где размещены утилиты в нижнем углу с правой стороны монитора.

Листинг 3.1. Эта программа выводит сообщение.

‹?php
echo "Hello, World!";
?›

Результат программы смотрите на рисунке

А теперь приступим к детальному рассмотрению данной программы. Вам нужно обратить внимание на конструкцию ‹?php ... ?›, у нее очень большая схожесть с HTML-тегом. С её помощью выделяют PHP-код. Слово echo используют для того чтобы вывести строку, она размещена в кавычках сразу после него (мы рассмотрим эту команду позже). Символ точка с запятой (;) делает туже функцию, что точка в самом конце предложения.

Вам нужно выбрать в меню браузера (в нашем случае Internet Explorer) Вид пункт В виде HTML . И вам раскроется содержимое, все что есть на странице, в текстовом редакторе. Просьба заметить, что Web-сервер переслал обозревателю только строчку «Hello, World!». И только в этом состоит главная изюминка серверного программирования, потому что когда вызываются HTML-файлы, они будут пересылаться без изменений. В данном случае сначала будет выполнен РНР- код, ну а потом и результат будет отправлен браузеру.

Еще одно о синтаксисе языка PHP , вам не нужно забывать, что если код не будет заключен в специальный набор тегов ‹?php...?›, то он будет передан без обработки РНР (см. рисунок и листинг ниже).

Листинг 3.2. Программа в которой не использованы теги РНР

‹html›
‹head›
‹title›Текст вне тегов PHP‹/title›
‹/head›
‹body›
echo "Это не PHP-код";
‹br›
‹?php
echo "Hello, World!";
?›
‹br›
echo "Это не PHP-код";
‹/body›

Результат работы этой посмотрите на рисунку. 3.2. И еще обратите внимание, что в нашем случае, команда echo не выполняется в первой и последней строке, а отображена как обычный текст. Это обстоятельство очень часто используют в практике для того чтобы выводить большие сообщения (более подробно вы узнаете дальше в этой главе).

Давайте вернемся к рассмотрению конструкций, обрамляющей PHP-код. Кроме известного тега ‹?php...?› бываю еще три разновидности:

  • ‹?...?›
  • ‹%...%›
  • ‹script language="php"›...‹/script›

Когда вы выбираете тот или иной вид конструкции, Вам нужно удостовериться о том, что настройки РНР позволяют их использовать. К примеру, малые теги ‹?...?› не всегда бывают включены по умолчанию (просмотрите значение параметра short_ open_tag и файла конфигурации php.ini), именно поэтому использовать их не рекомендуется. Конструкция ‹script language="php"›...‹/script› так же, как и ‹?php...?› всегда доступна, но из-за своей громоздкости она используется довольно редко. Тег ‹%...%› был использован в версии РНР 4.0.3. Работа его зависит от параметра asp_tags. В нашем самоучителе мы будем часто придерживаться тегов в виде ‹?php...?›.

Стоит сказать еще несколько слов о теге?>. В РНР его принимают как символ точка с запятой (;), именно поэтому в конце последней строчки можно его и не писать.

PHP поддерживает альтернативный синтаксис для некоторых управляющих конструкций, а именно для: if, switch, while, for и foreach . Основная форма альтернативного синтаксиса заключается в замене открывающей фигурной скобки на двоеточие (:), завершающая фигурная скобка заменяется на ключевое слово endif, endswitch, endwhile, endfor и endforeach , которое соответствует используемой конструкции.

if

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

$b): echo $a . " больше"; echo ", чем " . $b; elseif ($a == $b): // Обратите внимание, здесь elseif записан в одно слово. echo $a." равно ".$b; else: echo $a." меньше ".$b; endif; ?>

Замечание : если для определения нескольких условий if/elseif используется альтернативный синтаксис, в этом случае можно использовать только elseif в одно слово, т.е. вы не должны разделять else if в два слова, так как это вызовет фатальную ошибку в PHP.

$b): echo $a." больше, чем ".$b; else if ($a == $b): echo $a." равно ".$b; endif; ?>

Смешивание двух видов синтаксиса в одной конструкции не поддерживается, это правило относится ко всем операторам указанных в этой главе.

$b): echo $a . " больше"; echo ", чем " . $b; elseif ($a == $b) { // нельзя смешивать два вида записей в одной конструкции echo $a." равно ".$b; } else: echo $a." меньше ".$b; endif; ?>

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

switch

while

"; endwhile; ?>

for

"; for ($j = 0; $j < 2; $j++): echo "Вложенный цикл.
"; endfor; //вложенные конструкции тоже надо завершать ключевым словом endfor; ?>

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

"; for ($j = 0; $j < 2; $j++) { echo "Вложенный цикл.
"; } endfor; ?>

Дополнительные сведения

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

Приведем простой пример:

A равно 5

В приведенном примере, блок HTML-кода "A равно 5" вложен внутрь конструкции if написанной с альтернативным синтаксисом. HTML-блок будет показан только в том случае, если переменная $a будет равна 5 .

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

Рассмотрим примеры для других конструкций:

Значение равно 1.

Значение не известно.

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

A равно 5

A не равно 5

Синтаксис оператора foreach и его альтернативная запись будут рассмотрены позднее, а именно во время изучения массивов и объектов.