ProfiPHPProfiPHP
  1. Главная
  2. Самоучитель PHP 7
  3. Операторы

Операторы

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

Объединение строк


Если вы изучали другие языки программирования, тогда знакомы с оператором "+" для объединения строк. Но в PHP дело обстоит совсем по другому. Оператор "+" используется для арифметических операций и строка автоматически приводится к числовому значению, а для объединения строк используется символ точки ".".
<?php
$number = 123;
echo 'Число: ' . $number; // Число: 123
Точно также можно использовать интерполяцию переменной:
<?php
$number = 123;
echo "Число: {$number}"; // Число: 123
Помимо оператора точки "." существует оператор ".=", который предназначен для сокращения конструкции конкатенации:
<?php
$number = 123;
$str = 'Число: ';

$result = $str . $number; // Число: 123
$result = $str .= $number; // Число: 123

Конструкция Echo


С помощью конструкции Echo можно осуществлять вывод в окно браузера. Конструкция может принимать один или более параметров, разделенных запятой, которые она выводит в окно браузера.
<?php
$number = 123;
echo 'Число: ', $number; // Число: 123
Параметры конструкции Echo могут помещаться в необязательные круглые скобки, но делать это не рекомендуется, поскольку скобки в большинстве случаев используются для группировки, а использовать исключительно кавычки.

Часто вместо конструкции Echo используют строковую функцию Print, которая также позволяет выводить переменные в окно браузера, но принимает только один параметр, поэтому в ней нельзя приводить параметры через запятую. Кроме того, функция возвращает True в случае успешного вывода переменной, иначе возвращается False, в отличии от конструкции Echo, которая не возвращает ничего.

Арифметические операторы


Операции над числами производятся при помощи арифметических операторов: "+" - сложение, "*" - умножение, "-" - вычитание, "/" - деление, "%" - деление по модулю, "**" - возведение в степень, "++" - увеличение на единицу (инкремент), "--" - уменьшение на единицу (декремент).

Операторы сложения, вычитания, умножения и деления используются по правилам, принятым в арифметике: сначала выполняются операторы умножения и деления и лишь затем операторы сложения и вычитания. Для того чтобы изменить такой порядок, следует прибегать к группированию чисел при помощи круглых скобок.

В PHP, если при операции деления одного целого числа на другое получается дробное число, то результат автоматически приводится к вещественному типу. Для того чтобы получить целое значение, потребуется явно привести результат деления к целому типу либо при помощи конструкции (int), либо при помощи функции intval. Также можно настроить количество цифр после точки (по умолчанию 12) до необходимого значения директивой Precision в конфигурационном файле php.ini.

Помимо выше описанных операторов, можно также использовать "сокращенную запись" арифметических операторов. То есть, выражение $а = $а + $b в сокращенной форме запишется как $а += $b, что означает "присвоить операнду левой части сумму значений левого и правого операндов". Аналогичные действия допустимы для всех приведенных выше операторов ("+=", "*=", "-=", "/=", "%=", "**=", ".=").

Операции, в зависимости от количества участвующих операндов, подразделяют на унарные и бинарные. Унарная операция работает с одним операндом, бинарная - с двумя. Все арифметические операции, кроме операций инкремента и декремента, являются бинарными.

Операторы инкремента "++" и декремента "--" подразделяют на префиксные "++$var" и постфиксные "$var++". При префиксной операции инкремента увеличение значения операнда на единицу происходит до того, как возвращается значение. Соответственно, при постфиксной - после.
<?php
// префиксная форма:
$var = 1;
echo ++$var; // 2
// постфиксная форма:
$var = 1;
echo $var++; // 1
echo $var; // 2
Как видно из примера, при префиксной записи на выходе получается значение 2, поскольку префиксный оператор инкремента сначала выполняет инкрементирование, а лишь затем возвращает полученное значение. Во втором случае в качестве результата получается единица. Операции инкремента и декремента могут применяться только к переменным, то есть запись "++1" является неверной.

Операторы "++" и "--" применимы не только к целочисленным переменным. Например, можно выполнять операции со строковыми значениями:
<?php
$var = 'a';
echo ++$var; // b
Результатом выполнения этого кода будет строка "b", то есть буква "b" является следующей за "a" буквой алфавита.

Поразрядные операторы


Поразрядные операторы, они же битовые операторы, предназначены для выполнения манипуляций над отдельными битами числовых значений: "&" - соответствует побитовому "И" (AND); "|" - поразрядное объединение "ИЛИ" (OR); "^" - поразрядное исключающее "ИЛИ" (XOR); "~" - поразрядное отрицание (NOT); "<<" - сдвиг влево битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда; ">>" - сдвиг вправо битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда.

Операции над битовыми операторами выполняются над числами в двоичном представлении. Например, битовая операция "&" (И) над числами 5 и 6 даст результат 4:
<?php
echo 5 & 6; // 4
Результат можно легко объяснить, если перевести числа 5 и 6 в двоичное представление, в котором они равны "0101" и "0110" соответственно. Сложение разрядов при использовании оператора "&" происходит согласно правилам, то есть результат 1 только тогда, когда два операнда имеют единицу в столбце:
0101
0110
0100
Соответственно 0110 в двоичной системе равно 4 в десятичной системе.

Оператор "|" соответствует побитовому "ИЛИ" (пересечение). Применяя операцию "|" к числам, рассмотренным ранее, получим в результате 7:
<?php
echo 5 | 6; // 7
Пересечение разрядов при использовании оператора "|" происходит согласно правилам, то есть 1 в результате только тогда, когда хотя бы один операнд имеют единицу в столбце:
0101
0110
0111
Соответственно 0111 в двоичной системе равно 7 в десятичной системе.

Оператор "^" соответствует побитовому исключающему "ИЛИ" (XOR).
<?php
echo 5 ^ 6; // 3
Единица при пересечение разрядов с использованием оператора "^" происходит в результате только тогда, когда один из операндов имеет единицу в столбце, иначе 0:
0101
0110
0011
В двоичной системе "0011" соответственно равно 3 в десятичной системе.

Оператор отрицания "~" является побитовой инверсией и заменяет все 0 на 1 и наоборот.
<?php
echo ~6; // -7
В двоичном эквиваленте:
0110 (6)
1001 (-7)
Все побитовые операции производятся над целыми числами, знак в них кодируется первым разрядом: если он равен 0, число положительное, если он равен 1 - отрицательное. В двоичных числах ведущие нули обычно не указывают, но операция "~" производит их инвертирование - они заменяются единицами, приводя к отрицательным значениям. Так, операция -7 в двоичном представлении для 32-битного числа выглядит следующим образом:
00000000000000000000000000000110 (6)
11111111111111111111111111111001 (-7)
Помимо этого, бинарное представление отрицательных чисел инвертировано относительно положительных таким образом, чтобы их объединение при помощи "&" давало 0.

Оператор "«" сдвигает влево все биты первого операнда на число позиций, указанное во втором операнде. Сдвиг на отрицательное значение приводит к нулевому результату.
<?php
echo 5 << 6; // 320
В двоичном эквиваленте:
000000101 (5)
101000000 (320)
Оператор ">>" сдвигает вправо все биты первого операнда на число позиций, указанных во втором операнде. Сдвиг на отрицательное значение приводит к нулевому результату:
<?php
echo 5 >> 1; // 2
В двоичном эквиваленте:
000000101 (5)
000000010 (2)
Также как и арифметические операторы, поразрядные операторы поддерживают сокращенную запись: "&=", "|=", "^=", "<<=", ">>=".

Операторы сравнения


Операторы сравнения выполняют сравнивание заданных значений и возвращают True (истина) или False (ложь). Исключение составляет лишь оператор "<=>", который возвращает целое число. Оператор "<" - оператор "меньше", возвращает True, если переменная, указанная в левом аргументе, имеет значение строго меньше значения правой переменной. "<=" - оператор "меньше или равно", возвращает True, если переменная, указанная в левом аргументе имеет значение меньше или равное правому аргументу. Оператор ">" - "больше", работает аналогично оператору "<", за исключением изменения сторон аргументов. Оператор равенства "=" и его эквивалент "<>", возвращает True, если значение переменных по обоих сторонах равны. Оператор "!=" неравенства, возвращает True, если значение переменных разные. Оператор эквивалентности "===", возвращает True, если значение и тип переменных равны. Оператор неэквивалентности "!===", возвращает True, если либо значение, либо тип переменных не равны. Оператор "<=>" в случае равенства переменных возвращает 0, если левый аргумент больше правого возвращается положительное число 1, если меньше – отрицательное -1.
<?php
echo 2 > 1; // true
echo 2 > 3; // false
echo 2 >= 2; // true
echo 1 < 0; // false
echo 2 < 2; // false
echo 2 <= 2; // true
echo 1 == 0; // false
echo 1 == 1; // true
echo 1 != 0; // true
echo 1 != 1; // false
echo 0 == 'abc'; // true
echo 0 == ''; // true
echo 0 === ''; // false
echo 0 == null; // true
В комментариях к данному примеру приводятся значения True или False, но реально в окно браузера выводится либо значение 1 для True, либо пустая строка для False. В последней строке примера видно, что даже если значение 0 сравнивается с Null при помощи оператора равенства "==", возвращается значение истины (true). Однако иногда требуется проверить, равно ли значение переменной пустой строке ' ', 0 или Null. Для решения этой задачи предназначены операторы эквивалентности "===" и неэквивалентности "!==", они возвращают True только в том случае, если значения операндов в точности соответствуют друг другу.

Данные операторы имеют приоритет выполнения, например операции "==" и "!=" имеют более низкий приоритет по сравнению с остальными.

Приведем таблицы сравнения различных величин при помощи операторов равенства "==":

Таблицы сравнения различных величин при помощи операторов равенства "===":

Приведем код, который генерирует данные таблицы:
<style type="text/css">
table{ padding: 0.5em; overflow: auto; margin:0px; padding:0px; box-shadow: 10px 10px 5px #888888; border:1px solid #000000; -moz-border-radius-bottomleft:0px; -webkit-border-bottom-left-radius:0px; border-bottom-left-radius:0px; -moz-border-radius-bottomright:0px; -webkit-border-bottom-right-radius:0px; border-bottom-right-radius:0px; -moz-border-radius-topright:0px; -webkit-border-top-right-radius:0px; border-top-right-radius:0px; -moz-border-radius-topleft:0px; -webkit-border-top-left-radius:0px; border-top-left-radius:0px; border-collapse:collapse }
table tr:nth-child(odd){ background-color:#e6e6e6 }
table tr:ntd-child(even){ background-color:#ffffff }
table td{ Vertically-align: middle; text-align: center; border:1px solid #000000; border-widtd:0px 1px 1px 0px; padding:10px; font-family:Arial }
table td .green{ color:white;background-color:green; text-align: center; }
.green{ color:white;background-color:green }
</style>

$arrayValue = array(true, false, 1, 0, '1', '0', '-1', -1, NULL, array(), 'php' );
echo '<table>';
foreach ($arrayValue as $key => $valueHorizontally) {
if ( $key == 0 ) {
echo '<tr>';
foreach ($arrayValue as $key => $valueFirstTr) {
echo ($key == 0 ? '<td></td>' : '').'<td class="green">'.var_export($valueFirstTr, true).'</td>';
}
echo '</tr>';
}
echo '<tr>';
foreach ($arrayValue as $key => $valueVertically) {
echo ($key == 0 ? '<td class="green">'.var_export($valueHorizontally, true).'</td>' : '' ).'<td>'.($valueHorizontally === $valueVertically ? 'true' : 'false').'</td>';
}
echo '</tr>';
}
echo '</table>';

Приоритет выполнения операторов


Приведем список операторов в зависимости от приоритета выполнения. Операторы с более низким приоритетом расположены в ниже, с более высоким - выше. Операторы, расположенные на одной строке, имеют одинаковый приоритет, и выполняется в первую очередь тот из операторов, который встречается в выражении первым.
clone new
[]
**
++ --~(int) (float) (string) (array) (object) @
instanceof
!
* / %
+ - .
<< >>
< <= > >=
== != === !== <> <=>
&
^
|
&&
||
??
?:
​= += -= *= /= /= %= &= |= ^= <<= >>=
and
xor
or
,

Добавить комментарий

Имя:
Текст комментария: