Данный материал нужно рассматривать как ответвление от цикла "Как работает веб-сайт". Там мы разобрались с установкой и настройкой веб-сервера и языка 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", чтобы это была собственно программа. А почему, мы уже знаем.
Читайте дальше: Переменные, строки и среда исполнения