Выражения являются наиболее важными строительными блоками PHP. В PHP почти все, что вы пишете, является выражением. Самый простой, но самый точный способ определить выражение — «все, что имеет значение».

Самыми основными формами выражений являются константы и переменные. Когда вы вводите « $a = 5», вы присваиваете «5» переменной $a . «5», очевидно, имеет значение 5, или, другими словами, «5» — это выражение со значением 5 (в данном случае «5» — целочисленная константа).

После этого присваивания вы ожидаете, что значение $a также будет равно 5, поэтому, если вы напишете $b = $a , вы ожидаете, что оно будет вести себя так же, как если бы вы написали $b = 5. Другими словами, $a также является выражением со значением 5. Если все работает правильно, это именно то, что произойдет.

Несколько более сложными примерами выражений являются функции. Например, рассмотрим следующую функцию:

<?php
function foo ()
{
    return 5;
}
?>

Предполагая, что вы знакомы с концепцией функций, вы полагаете, что набор текста $c = foo()по существу ничем не отличается от написания $c = 5, и вы правы. Функции — это выражения со значением их возвращаемого значения. Поскольку foo() возвращает 5, значение выражения ' foo()' равно 5. Обычно функции не просто возвращают статическое значение, но что-то вычисляют.

Конечно, значения в PHP не обязательно должны быть целыми числами, и очень часто они таковыми не являются. PHP поддерживает четыре типа скалярных значений: значения int , значения с плавающей запятой ( float ), строковые значения и логические значения (скалярные значения — это значения, которые нельзя «разбить» на более мелкие части, в отличие, например, от массивов). PHP также поддерживает два составных (не скалярных) типа: массивы и объекты. Каждый из этих типов значений может быть присвоен переменным или возвращен из функций.

PHP использует выражения гораздо дальше, как и многие другие языки. PHP — это язык, ориентированный на выражения, в том смысле, что почти все является выражением. Рассмотрим пример, с которым мы уже имели дело, ' $a = 5'. Легко видеть, что здесь участвуют два значения: значение целочисленной константы '5' и значение $a , которое также обновляется до 5. Но правда в том, что здесь задействовано одно дополнительное значение, и это значение самого присваивания. Само присваивание возвращает присвоенное значение, в данном случае 5. На практике это означает, что ' $a = 5', независимо от того, что оно делает, является выражением со значением 5. Таким образом,= ( $a = 5)' похоже на запись ' $a = 5; $b = 5;' (точка с запятой отмечает конец оператора). Поскольку присваивания анализируются в порядке справа налево, вы также можете написать ' $b = $a = 5'.

Другим хорошим примером ориентации выражения является пре- и постинкремент и декремент. Пользователи PHP и многих других языков могут быть знакомы с обозначениями variable++и variable--. Это операторы инкремента и декремента . В PHP, как и в C, есть два типа инкремента — пре-инкремент и пост-инкремент. И пре-инкремент, и пост-инкремент по существу увеличивают переменную, и эффект на переменную идентичен. Разница заключается в значении выражения приращения. Предварительное приращение, которое записывается как «++ $variable », оценивается как увеличенное значение (PHP увеличивает переменную перед чтением ее значения, отсюда и название «предварительное приращение»). Пост-инкремент, который пишется '++' оценивается как исходное значение $variable до того, как оно было увеличено (PHP увеличивает переменную после чтения ее значения, отсюда и название "post-increment").

Очень распространенным типом выражений являются выражения сравнения . Эти выражения оцениваются как либо , falseлибо true. PHP поддерживает > (больше), >= (больше или равно), == (равно), != (не равно), < (меньше) и <= (меньше или равно). Язык также поддерживает набор операторов строгой эквивалентности: === (равно и того же типа) и !== (не равно или не того же типа). Эти выражения чаще всего используются внутри условного выполнения, например ifоператоров.

Последний пример выражений, с которыми мы здесь будем иметь дело, — это комбинированные выражения оператор-присваивание. Вы уже знаете, что если вы хотите увеличить $a на 1, вы можете просто написать ' $a ++' или '++ $a '. Но что, если вы хотите добавить к нему более одного, например, 3? Вы можете написать ' $a ++' несколько раз, но это, очевидно, не очень эффективный или удобный способ. Гораздо более распространенной практикой является запись « $a = $a + 3». ' $a + 3' оценивается как значение $a плюс 3 и присваивается обратно в $a , что приводит к увеличению $a. на 3. В PHP, как и в некоторых других языках, таких как C, вы можете написать это короче, что со временем станет яснее и быстрее для понимания. Добавление 3 к текущему значению $a может быть записано как ' $a += 3'. Это означает именно «взять значение $a , добавить к нему 3 и присвоить его обратно в $a ». Помимо того, что это короче и понятнее, это также приводит к более быстрому выполнению. Значение ' $a += 3', как и значение обычного присваивания, является присвоенным значением. Обратите внимание, что это НЕ 3, а комбинированное значение $a плюс 3 (это значение, присвоенное переменной $a ).). В этом режиме присваивания можно использовать любой двузначный оператор, например ' $a -= 5' (вычесть 5 из значения $a ), ' $b *= 7' (умножить значение $b на 7) и др.

Есть еще одно выражение, которое может показаться странным, если вы не видели его в других языках, — тернарный условный оператор:

<?php
$first ? $second : $third
?>

Если значение первого подвыражения true(отлично от нуля), то вычисляется второе подвыражение, которое является результатом условного выражения. В противном случае оценивается третье подвыражение, которое и является значением.

Следующий пример должен помочь вам немного лучше понять пре- и постинкремент и выражения в целом:

<?php
function double($i)
{
    return $i*2;
}
$b = $a = 5;        /* assign the value five into the variable $a and $b */
$c = $a++;          /* post-increment, assign original value of $a 
                       (5) to $c */
$e = $d = ++$b;     /* pre-increment, assign the incremented value of 
                       $b (6) to $d and $e */

/* at this point, both $d and $e are equal to 6 */

$f = double($d++);  /* assign twice the value of $d before
                       the increment, 2*6 = 12 to $f */
$g = double(++$e);  /* assign twice the value of $e after
                       the increment, 2*7 = 14 to $g */
$h = $g += 10;      /* first, $g is incremented by 10 and ends with the 
                       value of 24. the value of the assignment (24) is 
                       then assigned into $h, and $h ends with the value 
                       of 24 as well. */
?>

Некоторые выражения можно рассматривать как операторы. В этом случае оператор имеет форму ' expr ;', то есть выражение, за которым следует точка с запятой. In '$b = $a = 5;', '$a = 5'является допустимым выражением, но это не оператор сам по себе. '$b = $a = 5;'однако верное утверждение.

Последнее, о чем стоит упомянуть, — это значение истинности выражений. Во многих событиях, в основном при условном выполнении и циклах, вас не интересует конкретное значение выражения, а только то, означает ли оно trueили false. Константы trueи false(без учета регистра) являются двумя возможными логическими значениями. При необходимости выражение автоматически преобразуется в логическое значение.

PHP обеспечивает полную и мощную реализацию выражений, и ее полное документирование выходит за рамки данного руководства. Приведенные выше примеры должны дать вам хорошее представление о том, что такое выражения и как вы можете создавать полезные выражения. В оставшейся части этого руководства мы будем писать expr для обозначения любого допустимого PHP-выражения.