Найти тему
ZDG

Введение в язык PHP

Оглавление

Данный материал нужно рассматривать как ответвление от цикла "Как работает веб-сайт". Там мы разобрались с установкой и настройкой веб-сервера и языка PHP.

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

Самое первое (и неправильное) знакомство c PHP обычно происходит на примере HTML-страницы, в которую вставлен PHP-код:

<html><body>
<?php echo "Hello world!" ?>
</body></html>

Здесь происходит следующее: мы имеем HTML-код, в который вставлена инструкция PHP:

echo "Hello world!"

Она вставлена с помощью открывающего тэга "<?php" и закрывающего тэга "?>". То есть всё, что записано внутри области "<?php ... ?>", является PHP-кодом.

Представим, что эта HTML-страница запрашивается браузером с веб-сервера. Если на веб-сервере настроен обработчик PHP, то страница сначала пройдёт через него. HTML-код останется без изменений, а все области, обозначенные как "<?php ... ?>", не попадут в него. Они обработаются интерпретатором PHP и будет получен некий результат. Этот результат можно вставить в HTML-страницу с помощью инструкции echo. То есть после исполнения PHP-вставки HTML-страница превратится в такую:

<html><body>
Hello world!
</body></html>

И теперь эта страница отправляется браузеру.

Что такое PHP

PHP расшифровывается как PHP: Hypertext Preprocessor. Первая буква "P" превращается снова в PHP, то есть это рекурсивное название. Такие названия встречаются довольно часто, например GNU - GNU Not Unix.

Но тут интересно другое, а именно Hypertext Preprocessor, то есть препроцессор гипертекста. Гипертекст это HTML, а препроцессор – тот, кто делает предварительную обработку.

Когда запрашивается HTML-страница, все области "<?php ... ?>" в ней обрабатываются и мы получаем новую HTML-страницу, где этих областей уже нет или они заменены на что-то другое.

То есть страница была предварительно обработана, перед тем как попасть в основной обработчик – браузер.

В связи с этим часто возникает заблуждение, что язык PHP предназначен только для того, чтобы делать вставки в HTML-страницы. Фокус смещается в сторону HTML – страница это главное, а PHP-вставки второстепенны.

Это не так

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

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

Так что вы можете написать на PHP программу для математических расчётов, или обработчик файлов, или собственный веб-сервер, но не можете написать даже Тетрис (если только он будет текстовый и пошаговый).

Как всё работает на самом деле?

Давайте ещё раз посмотрим на HTML-страницу с PHP-вставкой:

<html><body>
<?php echo "Hello world!" ?>
</body></html>

То, что вам кажется HTML-кодом, на самом деле им не является. Это программа, целиком написанная на PHP.

У интерпретатора PHP, как говорилось выше, есть каналы общения с внешним миром: стандартный ввод (STDIN) и стандартный вывод (STDOUT). На ввод интерпретатора PHP попадает текст программы. Всё, что не находится внутри "<?php ... ?>", просто пересылается на вывод. Таким образом, на выводе сперва появляется "<html><body>". Затем встречается область "<?php echo "Hello world!" ?>" и PHP исполняет код внутри неё. В результате команды echo на выводе появляется "Hello world!". Затем на выводе появляется "</body></html>".

Обратите внимание, что тот же результат можно получить так:

<?php
echo "<html><body>";
echo "Hello world!";
echo "</body></html>";
?>

или так:

<?php echo "<html><body>" ?>
<?php echo "Hello world!" ?>
<?php echo "</body></html>" ?>

или так:

<?php
echo "<html><body>Hello world!</body></html>";
?>

Теперь мы уже хорошо видим, что это никакая не HTML-страница, а программа на PHP, которая выводит код страницы.

Следовательно, первоначальный вариант с HTML-кодом и вставками – это просто способ не писать echo. Вместо этого мы договариваемся, что всё, что находится вне блоков "<?php ... ?>", должно просто выводиться в STDOUT, как будто мы использовали echo.

Чтобы не было иллюзии, что это работает только с HTML, создадим файл test.php и напишем в нём аналогичную программу с произвольным текстом:

The quick brown fox <?php echo "jumps"?> over the lazy dog

Выполнить эту программу можно из командной строки:

php test.php

В результате мы получим:

The quick brown fox jumps over the lazy dog

Часть текста вывелась в STDOUT автоматически, а часть – с помощью echo.

Можно совсем убрать из текста программы вставку "<?php ... ?>", и всё равно это будет корректная PHP-программа. Любой текст, который в ней есть, будет просто попадать на вывод.

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

Когда вы смотрите HTML-страницу с PHP-вставками, вы должны представлять её себе с точностью до наоборот: как PHP-программу с автовыводом HTML-вставок. Это позволит вам избежать многих недоразумений и логических ошибок.

Что касается остального программирования на PHP, то любая программа должна начинаться с "<?php", чтобы это была собственно программа. А почему, мы уже знаем.

Читайте дальше: Переменные, строки и среда исполнения