Для того чтобы хорошо разобраться, как РНР принимает эти решения, посмотрим, как он обращается с операторами.
Операторы и функции
Мы уже видели код РНР, где требовались значения: чаще всего для вывода значения мы применяли команду echo. Мы использовали значения и в некоторых других случаях: в правой части операции присваивания, в качестве аргументов функций и даже внутри фигурных скобок в сложной ссылке на переменную.
Есть несколько способов предоставить РНР значение во всех этих ситуациях. Те объекты, которые РНР может интерпретировать в этих ситуациях как значения, называются выражениями. Мы уже встретили три типа выражений: литералы, переменные и константы.
Выражение - это все, что можно воспринимать как имеющее значение. У литералов есть литеральное выражение, переменные ссылаются на хранящееся в них значение, как и константы. Однако это не единственные типы выражений в РНР. РНР поддерживает два типа которые должны вычисляться, чтобы определить принимаемое ими значение: операции и вызовы функций.
Мы видели вызовы функций, которые использовались так: echo(gettype("Hello"));
Вызов функции вычисляется, чтобы предоставить некото
рое данное ("string"), которое передается команде echo. Это выражение - у него есть значение. Этот вызов функции может, как мы сказали, быть помещен везде, где используется переменная или литерал. Следовательно, допустим такой код:
$а = gettype("Hello"); ${gettype("Hello")} = "World"; echo(gettype(gettype("Hello")));
В первом случае строка "string" записывается в $а, во втором - строка "World" записывается в переменную $string, а в третьем выводится результат применения gettypeO к значению, возвращаемому gettype().
Операция - это выражение, содержащее оператор. В следующем коде: echo(2 +
2 + 2 представляет собой операцию, значением которой является 4. Операторы похожи на сокращенное обозначение функций. При наличии функции, обеспечивающей равноценные действия, тот же результат, что и выше, можно было бы получить, написав:
echo(add(2, 2));
Оператор сложения (+) - бинарный: он действует над двумя значениями. Другие бинарные операторы: «больше» (>), оператор конкатенации (.) и оператор присваивания (=).
Существуют также унарные операторы, действующие над одиночным значением. Примерами служат оператор инкрементирования (++), булево отрицание NOT и уже встречавшиеся операторы преобразования типа, например (int).