PHP-Nuke по-русски    Главная
Начальная
страница
 Клуб
Русский
клуб
 Разделы
Тематические
разделы
 Ссылки
Каталог
сайтов
 Файлы
Каталог
программ
 Школа
Практические
занятия
 Форум
Форумы
поддержки
Учебник РНР
Назад Вперёд

Глава 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-выражения.


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

© RigaNet - Internet studio
For Web site issues, contact the Web master.

Rambler's Top100 Рейтинг@Mail.ru RigaNet