Найти в Дзене
ZDG

Введение в язык PHP #2: Переменные, строки и среда исполнения

Предыдущая часть: Введение в 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 это универсальный язык, не обязанный работать только для веба. При запуске из командной строки, естественно, никакой среды веб-сервера уже не будет, и все вышеперечисленные переменные останутся, но будут пустыми.

Читайте дальше: