PHP - Урок 6. Конструкции print и echo. Кавычки одинарные и двойные и конкатенация строк
Данные приходят на сервер вместе с запросом от браузера.
Они либо запрашивают файл. Либо передают помимо всего пользовательские данные - но все равно что-то запрашивают у сервера :D
Путь к файлу как раз-таки указывается после названия сайта в адресной строке.
Например наш сайт thesite.loc выглядит в запросе серверу так:
http://thesite.loc
А вот наш положенный файл test.php запрашивать нужно так:
http://thesite.loc/test.php
То есть мы его добавляем к адресу сайта после слэша ('/').
Как его находит сервер я рассказал в статье PHP - Как работает сервер и PHP - Урок 4. PHP - интерпретатор.
Однако ж, смотрите, довольно часто мы переходим по ссылкам, которые не содержат явного указания на файл. То есть например http://thesite.loc
нашего сайта, сообщает в запросе GET только название сайта. (если быть более точным название сайта передается серверу в заголовке запроса, предварительно специальная программа DNS у вашего провайдера, через которого мы выходим в Интернет, читает имя сайта, и передает нам IP сервера - компьютера где этот сайт находится. Затем к нему запрос отправляется по маршрутизаторам.
Так как же программа-сервер узнает какой файл отправить в ответ клиенту, если его в запросе нет.
Очень просто. Сервер можно настроить, так чтобы, если в запросе нет никакой информации о нужном файле, так чтобы он отправлял в таком случае файл по умолчанию.
Есть даже заранее установленные в настройках серверной программы названия таких файлов. Обычно это
index.html, index.htm и если вместе с сервером установлен php-интерпретатор - index.php
Если мы будем обращаться к адресу http://thesite.com
то сервер будет искать в папке www (корневой для нашего данного сайта) файл index.php (если его там нет то поищет еще index.html и index.htm) и затем передаст его нам. Если формат php то предварительно пропустит через php-интерпретатор.
И мы получим ответ как-будто бы мы запросили http://thesite.loc/index.php
Что дальше делает php
Итак когда мы запрашиваем файл в формате php у сервера он их пропускает предварительно через интерпретатор php. А он что-то делает с кодом внутри <?php ... ?>
. То есть он выполняет команды написанные там и вместо них подставляет данные - результат работы этих команд.
В основном результат работы этих команд хранится в памаяти выделенной для процесса интерпретатора (буфере). Но мы их можем вывести в любой момент. С помощью специальных конструкций языка - print либо echo.
Это именно конструкции, а не функции. Хотя могут быть описаны и как функции например `echo "hello"; и echo("hello") будут работать одинаково.
Но они не будут задействовать сам интерпретатор для каких-либо вычислений. Они тупо выведут данные в поток клиенту. То есть в запрашиваемый их браузер.
Однако иногда приходится работать интерпретатору - это случай подстановки переменных в вывод.
Кавычки и конструкция echo
Когда мы выводим текст через echo или print мы должны его заключить в кавычки. Либо в '...' либо в "..."
Проще говоря это нужно, чтобы интерпретатор их смог отличить от цифр и собрать в единую строку - литерал.
Но между этими двума кавычками есть разница.
Одинарные кавычки
То что вы выводите в одинарных кавычках echo 'Hello? world';
передается обратно в браузер без изменений.
То есть как вы напишите так и будет :)
Это полезно, особенно когда вы пишите переменные php но не не хотите, чтобы они обрабатывался php
Чтобы было более понятно читаем далее))
<?php
$name = 'Руслан';
$num = 48;
echo 'Привет, $name, ты живешь в квартире номер $num Мы Anonimous - жди нас.';
Двойные кавычки
В двойных кавычках мы можем вставлять переменные, а также управляющие символы. Например:
<?php
$name = 'Руслан';
$num = 48;
echo "Привет, $name, ты живешь в квартире номер $num! Мы Anonimous - жди нас.";
То есть, если бы мы написали вышележащий код в одинарных кавычках, то бы echo его вернула бы в браузер клиента так как там написано в этих кавычках.
Но в двойных кавычках php-интерпретатор заменить переменные $name и $num на Руслан и 48 соответственно.
Конкатенация
Кстати говоря то же самое можно было бы написать как то так
<?php
$name = 'Руслан';
$num = 48;
echo 'Привет, '.$name.', ты живешь в квартире номер '.$num!.' Мы Anonimous - жди нас.";
На выводе - то же самое что и в примере с двойными кавычками. Однако здесь переменные не входят в литерал строки.
Когда это может быть полезно. Достаточно часто. Особенно при работе с SQL-запросами, до которых мы вскоре доберемся.
Те же самые эксплоиты и SQL-инъекции, которые проверяют безопасность сайта/сервера. Пишутся как раз таки в одинарных кавычках. Но эта уже история про безопасность которая в данный курс не входит.