ArtEngineArtEngine
Главная | Регистрация | Статистика | Расширенный поиск | Новое на сайте  

Меню

Аккаунт

Реклама

 
Реклама
 
 

Выражения
 
Учебник РНР
Назад Вперёд

Глава 9. Выражения

Выражения это краеугольный камень PHP. В PHP вы почти всё записываете в виде выражений. Точнее и проще всего определить выражение как "нечто, имеющее значение".

Базовыми формами выражений являются константы и переменные. Если вы записываете "$a = 5", вы присваиваете "5" переменной $a. "5", очевидно, имеет значение 5 или, другими словами, "5" это выражение со значением 5 (в данном случае "5" это целочисленная/integer константа).

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

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

function foo ()
{
    return 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.

Имеется ещё одно выражение, которое может показаться неоднозначным, если вы не встречали его в других языках, тернарная условная операция:

$first ? $second : $third

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

Следующий пример должен помочь понять pre- и post-increment и выражения:

function double($i)
{
    return $i*2;
}
$b = $a = 5;        /* присвоить значение 5 переменным $a и $b */
$c = $a++;          /* post-increment, присвоить оригинальное значение $a 
                       (5) переменной $c */
$e = $d = ++$b;     /* pre-increment, присвоить увеличенное значение
                       $b (6) переменным $d и $e */

/* с этого места $d и $e равны 6 каждая */

$f = double($d++);  /* присвоить дважды значение $d до
                       инкремента, 2*6 = 12, переменной $f */
$g = double(++$e);  /* присвоить дважды значение $e после
                       инкремента, 2*7 = 14, переменной $g */
$h = $g += 10;      /* сначала $g увеличивается на 10 и останавливается на
                       значении 24. Значение присвоения (24) присваивается
                       затем переменной $h, и $h получает окончательное
                       значение - также 24 . */

В начале главы мы говорили, что опишем различные типы операторов, и, как и было обещано, показали, что выражения могут быть операторами. Однако не каждое выражение является оператором. В нашем случае оператор имеет форму "expr" ";"  - то есть выражения с последующим символом "точка с запятой". В "$b=$a=5;", $a=5 является правильным выражением, но это не оператор. "$b=$a=5;", однако, это правильный оператор.

Последнее важное, что необходимо рассмотреть, это условная часть выражений. Часто (особенно в при условном выполнении и в циклах) вас интересует не конкретное значение выражения, а только то, вычисляется оно в TRUE или в FALSE. Константы TRUE и FALSE (чувствительны к регистру) это два возможных булевых значения. Когда это необходимо, выражение автоматически конвертируется в boolean. См. раздел о приведении типов.

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

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


Назад Оглавление Вперёд
Предопределённые константы ВверхОперации
На главную
 


 

Опрос

Друзья

Реклама

  2007 © PHP-Book
Designed by PHP-Book.Net