2.6 Выражения PHP

Выражение — это один из “кирпичей”, на которых держится здание PHP. Действительно, практически все, что вы пишете в программе, — это выражения. Выражение — нечто, имеющее определенное значение. И обратно: если что-то имеет значение, то это “что-то” есть выражение.
Самый простой пример выражения — переменная или константа, стоящая, скажем, в правой части оператора присваивания. Например, цифра 5 в операторе
$a = 5;
есть выражение, т. к. оно имеет значение 5. После такого присваивания мы вправе ожидать, что в $a окажется 5. Теперь, если мы напишем
$b = $a;
то, очевидно, в $b окажется также 5, ведь выражение $a в правой части оператора имеет значение 5.
Посмотрим еще раз на приведенный пример. Помните, мы говорили, что практически все, из чего мы составляем программу, — это выражения? Так вот, $b = $a — тоже выражение! (Впрочем, это не будет сюрпризом для знатоков C или Perl.) Нетрудно догадаться, какое оно имеет значение: 5. А это значит, что мы можем написать нечто вроде следующих команд:
$a = ($b = 10); // или просто $a = $b = 10
При этом переменным $a и $b присвоится значение 10. А вот еще пример, уже менее тривиальный:
$a = 3 * sin($b = $c + 10) + $d;
Что окажется в переменных после выполнения этих команд? Очевидно, то же, что и в результате работы следующих операторов:
$b = $c + 10;
$a = 3 * sin($c + 10) + $d;
Мы видим, что в PHP при вычислении сложного выражения можно (если какая-то его часть понадобится нам впоследствии) задавать переменным значения этой части прямо внутри оператора присваивания. Такой прием может действительно сильно упростить жизнь и сократить код программы, “читабельность” которой сохранится на прежнем уровне, поэтому советуем им иногда пользоваться.
Совершенно точно можно сказать, что у любого выражения есть тип его значения. Например:
$a = 10 * 20;
$b = “” . (10 * 20);
echo “$a:”.gettype($a).”, $b:”.gettype($b); // выведет “200:integer, 200:string”

Логические выражения
Логические выражения — это выражения, у которых могут быть только два значения: ложь и истина (или, что почти то же самое, 0 и 1). Что, поверили? Напрасно — на самом деле абсолютно любое выражение может рассматриваться как логическое в “логическом” же контексте (например, как условие для конструкции if-else). Ведь, как уже говорилось, в качестве истины может выступать любое ненулевое число, непустая строка и т. д., а под ложью подразумевается все остальное.
Для логических выражений справедливы все те выводы, которые мы сделали насчет логических переменных. Эти выражения чаще всего возникают при применении операторов >, < и == (равно), || (логическое ИЛИ), && (логическое И), ! (логическое НЕ) и др. Например:
$less = 10 < 5; // $less – false
$equals = $b == 1; // $equals – true, если $b == 1
$between = $b >= 1 && $b <= 10 // $between – true, если $b от 1 до 10
$x = !($b || $c) && $d; // true, если $b и $c ложны, а $d – истинно
Как осуществляется проверка истинности той или иной логической переменной? Да точно так же, как и любого логического выражения:
$between = $x >= 1 && $x <= 7; // присваиваем $between значение выражения if ($between) echo “x в нужном диапазоне значений”;

Строковые выражения
Строки в PHP — одни из основных объектов. Как мы уже говорили, они могут содержать текст вместе с символами форматирования или даже бинарные данные. Определение строки в кавычках или апострофах может начинаться на одной строке, а завершаться — на другой. Вот пример, который синтаксически совершенно корректен:
$multiline = “Это текст, начинающийся на одной строке и продолжающийся на другой, третьей и т. д.”;
Мы уже много раз использовали в примерах строковые константы, заключенные как в кавычки, так и в апострофы. Настало время поговорить о том, чем эти представления отличаются.

Строка в апострофах
Начнем с самого простого. Если строка заключена в апострофы (например, ‘строка’), то она трактуется почти в точности так же, как записана, за исключением двух специальных последовательностей символов:
 последовательность \’ трактуется PHP как апостроф и предназначена для вставки апострофа в строку, заключенную в апострофы: ‘д\’Артаньян’;
 последовательность \\ трактуется как один обратный слеш и позволяет вставлять в строку этот символ: ‘C:\\m2transcript.txt’.
Все остальные символы обозначают сами себя, в частности, символ $ не имеет никакого специального значения (отсюда вытекает, что переменные внутри строки, заключенной в апострофы, не интерполируются, т. е. их значения не подставляются).

Строка в кавычках
По сравнению с апострофами кавычки более “либеральны”. То есть, набор специальных метасимволов, которые, будучи помещены в кавычки, определяют тот или иной специальный символ, гораздо богаче.
Вот некоторые из них:
 \n обозначает символ новой строки;
 \r обозначает символ возврата каретки;
 \t обозначает символ табуляции;
 \$ обозначает символ $, чтобы следующий за ним текст случайно не был интерполирован, как переменная;
 \” обозначает кавычку;
 \\ обозначает обратный слеш;
 \xNN обозначает символ с шестнадцатеричным кодом NN.
Переменные в строках интерполируются. Например:
$hell = “Hello”;
echo “$hell world!”
Этот фрагмент выведет
Hello world!
т. е. $hell в строке была заменена значением переменной $hell (этому поспособствовал знак доллара, предваряющий любую переменную).
Давайте рассмотрим еще один пример.
$SOME = “Hell”; // слово Hello без буквы “o”
echo “$SOMEo world!”;
Мы ожидаем, что выведется опять та же самая строка. Но задумаемся: как PHP узнает, имели ли мы в виду переменную $SOME или же переменную $SOMEo? Очевидно, никак. Запустив фрагмент, убеждаемся, что он генерирует сообщение о том, что переменная $SOMEo не определена. Как же быть? А вот как:
$SOME = “Hell”; // слово Hello без буквы “o”
echo $SOME.”o world!”; // один способ
echo “{$SOME}o world!”; // другой способ
echo “${SOME}o world!”; // третий способ!
Мы видим, что существуют три способа преодолеть проблему. Каким из них воспользоваться — дело ваше. Наиболее перспективный, на наш взгляд, вариант — это {$SOME}, ибо таким методом можно вставлять в строку не только значения переменных, но также элементы массивов и свойства объектов:
$action = array(
“left” => “survive”,
“right” => “kill’em all”
);
echo “Выбранный элемент: {$action[‘left’]}”;
Обратите внимание на апострофы, которые используются для обрамления ключа массива внутри конструкции {}. Если вы опустите их, получите предупреждение интерпретатора. Попробуйте теперь написать без использования фигурных скобок и апострофов:
echo “Выбранный элемент: $action[left]”;
Выведется та же самая строка, но на этот раз уже без предупреждений.

Вызов внешней программы
Последняя строковая “константа” — строка в обратных апострофах (например, `команда`), заставляет PHP выполнить команду операционной системы и то, что она вывела, подставить на место строки в обратных апострофах. Вот так, например, мы можем в системе Windows узнать содержимое текущего каталога, которое выдает команда dir:
$st = `command.com/c dir`;
echo “<pre>$st</pre>”;

Залишити відповідь