|
||||||||||
Глава 9. ВыраженияВыражения это краеугольный камень PHP. В PHP вы почти всё записываете в виде выражений. Точнее и проще всего определить выражение как "нечто, имеющее значение". Базовыми формами выражений являются константы и переменные. Если вы записываете "$a = 5", вы присваиваете '5' переменной $a. '5', очевидно, имеет значение 5 или, другими словами, '5' это выражение со значением 5 (в данном случае '5' это целочисленная/integer константа). После этого присвоения вы предполагаете, что $a имеет значение 5, поэтому, если вы записываете $b = $a, вы ожидаете, что результат будет таким же, что и при записи $b = 5. Иначе говоря, $a это выражение со значением 5. Если всё работает правильно, результат будет именно таким. Более сложным примером выражения являются функции. Например, рассмотрим функцию:
Будем считать, что вы уже знакомы с понятием "функция" (если нет, просмотрите главу о функциях), и предполагаете, что запись $c = foo() даёт тот же результат, что и запись $c = 5, - и будете правы. Функция является выражением, имеющим значение своего return-значения. Поскольку foo() возвращает/return 5, значением выражения 'foo()' является 5. Обычно функции не просто возвращают статичное значение, а что-то вычисляют. Разумеется, значения в PHP не обязательно должны быть только целочисленными. PHP поддерживает три типа скалярных значений: integer/целочисленные, с плавающей точкой/floating point и строковые/string значения (скалярными являются значения, которые нельзя 'разбить' на небольшие части, как, например, это можно делать с массивами). PHP также поддерживает два сложных (нескалярных) типа: массивы и объекты. Каждый из этих типов может быть присвоен переменной или возвращён из функции. Итак, пользователи PHP/FI 2 не должны почувствовать каких-либо изменений. Однако PHP продвинул выражения значительно дальше, как и многие другие языки. PHP это язык, ориентированный на выражения, рассматривающий почти любое действие как выражение. Рассмотрим тот же пример: '$a = 5'. Хорошо видно, что здесь имеются два значения, значение целочисленной константы '5' и значение переменной $a, которая также обновляется до 5. Но здесь имеется и ещё одно дополнительное значение: это значение самого присвоения. Само присвоение вычисляется в присвоенное значение, в данном случае - в 5. На практике это означает, что '$a = 5', независимо от того, что оно делает, является выражением со значением 5. Таким образом, если записать что-нибудь вроде '$b = ($a = 5)', это будет равносильно записи '$a = 5; $b = 5;' (; обозначает конец оператора). Поскольку присвоения разбираются слева направо, вы можете также записать '$b = $a = 5'. Другой хороший пример ориентации на выражения - пре- и пост-инкремент и декремент. Пользователи PHP/FI 2 и многих других языков уже наверняка знакомы с нотацией переменная++ и переменная--. Это операции инкремента и декремента. В PHP/FI 2 оператор '$a++' не имеет значения (не является выражением), и, таким образом, вы не можете присвоить его или использовать иным образом. PHP улучшает возможности операций increment/decrement, делая их также выражениями, как в C. В PHP, как и в C, есть два типа инкремента: pre-increment и post-increment. И pre-increment, и post-increment увеличивают значение переменной на 1, и значения переменной идентичны. Разница в значении выражения инкремента. Pre-increment, который записывается как '++$variable', вычисляется в новое значение (PHP сначала увеличивает значение, прежде чем его прочитать, отсюда название 'pre-increment'). Post-increment, который записывается '$variable++', вычисляет оригинальное значение переменной $variable, а затем выполняет инкремент (PHP увеличивает переменную после чтения её значения, отсюда название 'post-increment'). Очень распространённый тип выражений - выражения сравнения. Они вычисляются в 0 или 1, означая FALSE или TRUE (соответственно). PHP поддерживает > (больше), >= (больше или равно), == (равно), != (не равно), < (меньше) и <= (меньше или равно). Эти выражения чаще всего используются внутри условных операторов, таких как if. Последний пример выражений, рассматриваемых нами здесь, это комбинированные выражения вида операция-присвоение. Вы уже знаете, что, если вы хотите увеличить $a на 1, вы просто записываете '$a++' или '++$a'. Но что, если вы хотите добавить больше, чем 1, например, 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 -= 5' (вычесть 5 из значения переменной $a), '$b *= 7' (умножить значение переменной $b на 7), etc. Имеется ещё одно выражение, которое может показаться неоднозначным, если вы не встречали его в других языках, тернарная условная операция:
Если значение первого подвыражения TRUE (не нуль), то вычисляется второе подвыражение, которое становится результатом всего условного выражения. Иначе вычисляется третье выражение, которое и становиться значением. Следующий пример должен помочь понять pre- и post-increment и выражения:
В начале главы мы говорили, что опишем различные типы операторов, и, как и было обещано, показали, что выражения могут быть операторами. Однако не каждое выражение является оператором. В нашем случае оператор имеет форму 'expr' ';' - то есть выражения с последующим символом "точка с запятой". В '$b=$a=5;', $a=5 является правильным выражением, но это не оператор. '$b=$a=5;', однако, это правильный оператор. Последнее важное, что необходимо рассмотреть, это условная часть выражений. Часто (особенно в при условном выполнении и в циклах) вас интересует не конкретное значение выражения, а только то, вычисляется оно в TRUE или в FALSE . Константы TRUE и FALSE (чувствительны к регистру) это два возможных булевых значения. Когда это необходимо, выражение автоматически конвертируется в boolean. См. раздел о приведении типов. PHP предоставляет полную и мощную реализацию выражений, и документирование их выходит за рамки данного учебника. Вышеприведённые примеры должны дать вам хорошее представление о том, что такое выражения и как вы их можете конструировать. В последующих разделах учебника мы будем записывать expr для обозначения правильного PHP-выражения. |
||||||||||
|