Предыдущая часть: Введение в PHP
Как и в других языках, в PHP есть переменные, однако их внешний вид довольно своеобразен.
Если в C, Java, JavaScript, Python и т.д. мы пишем:
a = 5;
То в PHP нужно писать:
$a = 5;
Иначе говоря, все имена переменных должны иметь перед собой знак доллара:
$c = $a + $b;
Подобное решение имеет определённые, но не вполне бесспорные преимущества.
1. Разделение переменных и констант
Чтобы объявить в PHP константу, нужно написать:
const HELLO = 'Hello World';
Имя константы HELLO используется без знака доллара и значит, по тексту мы всегда можем отличить константу от переменной. (Обычно их ещё отличают по заглавным буквам, но это не обязательное правило.)
2. Вывод переменных в текстовой строке
Если переменная $a равна "Hello", и мы хотим напечатать её значение в составе текстовой строки, достаточно указать переменную прямо в строке:
$a = "Hello";
echo "Значение a равно $a";
Мы получим такой текстовый вывод:
Значение a равно Hello
То есть, когда язык PHP встречает в строке символ $, он считает, что после него записано имя переменной, и вставляет в строку значение этой переменной.
В языке типа Python или JavasScript пришлось бы писать примерно так:
print('Значение a равно ' + a)
Так можно написать и в PHP:
echo 'Значение a равно ' . $a;
Как видим, для сложения строк используется не "+", а ".".
Также обратите внимание, что для задания строки в PHP можно использовать и одинарные, и двойные кавычки. Между ними есть разница: если строка записана в двойных кавычках, то в ней будут отслеживаться знаки "$" и другие управляющие символы, такие как "\n". Если же строка записана в одинарных кавычках (апострофах), то никакие спецсимволы внутри неё работать не будут.
Если вам надо записать в строке знак доллара, который не относится к имени переменной, то следует либо использовать апострофы:
echo '$a' → выводит как есть $a
либо использовать экранирующий знак "\":
echo "\$a" → выводит тоже $a
Можно также комбинировать любые строки и любые способы вывода:
echo 'Значение a равно ' . $a . " значение b равно $b";
3. Динамические имена переменных, функций и свойств объектов
В некоторых случаях вам может понадобиться обращаться к функциям, имена которых зависят от текущей ситуации.
Вы можете поместить имя функции в переменную и обратиться к ней через эту переменную:
$a = 'test';
$a();
В результате будет вызвана функция test().
Так же можно обращаться к свойствам объектов (про объекты пока не углубляюсь):
$a->test – это обращение к свойству test объекта $a.
$b = 'test';
$a->$b – это тоже обращение к свойству test объекта $a, но уже через переменную $b.
Можно даже обратиться к переменной с динамическим именем:
$a = 'Hello';
$b = 'a';
echo $$b; → выведет Hello
Как видим, после знака доллара указана переменная $b, которая равна 'a', то есть мы динамически, через значение $b, обращаемся к переменной $a.
Хорошо ли это?
В целом, всё это довольно спорные решения, и сам язык PHP развивался весьма неровно. Очевидно, что знаки доллара были взяты по аналогии с языком Perl, где всё практически то же самое, но в Perl также есть знаки "@" и "%", имеющие другое назначение и образующие вместе с долларом какую-то систему, в PHP же попал только доллар.
Динамические имена переменных вообще очень спорны с точки зрения понимания кода. Так что несмотря на наличие такой возможности, использовать её повсеместно не следует.
Cреда исполнения
Программа на практически любом языке всегда работает в какой-то среде, заранее подготовленной для неё. В этой среде присутствуют заранее определённые переменные, которые мы не создавали – они уже созданы для нас. Например, в программе на C это аргументы командной строки argc, argv. В программе на JavaScript это объект окна браузера (window) и объект документа (document), и т.д.
Так как PHP-скрипты рассчитаны на работу в среде веб-сервера, у них тоже есть подготовленные заранее переменные:
$_GET – массив параметров, полученных веб-вервером из GET-запроса.
$_POST – массив параметров, полученных веб-сервером из POST-запроса.
$_COOKIE – массив параметров куки, переданных веб-серверу из браузера
$_FILES – массив загруженных на сервер файлов
$_SERVER – прочие переменные веб-сервера
Это далеко не всё, что передаётся в программу от веб-сервера. Но как можно видеть, исполняемый на сервере PHP-скрипт имеет доступ ко всему, к чему имеет доступ веб-сервер. Он может проанализировать запрос, выполнить любые действия и сгенерировать любую страницу в ответ.
А что будет при запуске из командной строки?
Как говорилось ранее, PHP это универсальный язык, не обязанный работать только для веба. При запуске из командной строки, естественно, никакой среды веб-сервера уже не будет, и все вышеперечисленные переменные останутся, но будут пустыми.
Читайте дальше: