Операторы PHP
Все типы операторов PHP: арифметические, сравнения, логические, строковые, массивов, космический корабль и нулевое объединение — с примерами и правилами приоритета.
Оператор принимает одно или несколько значений (называемых операндами) и порождает из них новое значение. Операторы — это строительные блоки каждого выражения в PHP: они позволяют выполнять арифметику, сравнивать значения, комбинировать булевы условия, присваивать результаты переменным и соединять строки.
В этой главе рассмотрены все категории операторов PHP с запускаемыми примерами: арифметические, присваивания, сравнения, логические, инкремент/декремент, строковые, массивов, оператор «космический корабль», оператор нулевого объединения, а также приоритет операторов, который определяет порядок вычислений.
Арифметические операторы
Арифметические операторы выполняют привычные математические операции над числами.
| Оператор | Название | Пример | Результат |
|---|---|---|---|
+ | Сложение | 10 + 5 | 15 |
- | Вычитание | 10 - 5 | 5 |
* | Умножение | 10 * 5 | 50 |
/ | Деление | 10 / 4 | 2.5 |
% | Остаток от деления | 10 % 3 | 1 |
** | Возведение в степень | 2 ** 4 | 16 |
<?php
$x = 10;
$y = 3;
echo $x + $y; // 13
echo $x - $y; // 7
echo $x * $y; // 30
echo $x / $y; // 3.3333333333333
echo $x % $y; // 1 (remainder of 10 / 3)
echo $x ** $y; // 1000 (10 to the power of 3)Примечание: В отличие от многих языков,
/в PHP не усекает результат.10 / 4равно2.5, а не2. Используйтеintdiv()для целочисленного деления. Оператор%работает с целыми числами; для нахождения остатка от деления с плавающей точкой используйтеfmod().
Операторы присваивания
Базовый оператор присваивания — =: он сохраняет значение справа в переменную слева. Каждый арифметический оператор также имеет комбинированную (составную) форму, которая обновляет переменную на месте.
| Оператор | То же, что |
|---|---|
$a += $b | $a = $a + $b |
$a -= $b | $a = $a - $b |
$a *= $b | $a = $a * $b |
$a /= $b | $a = $a / $b |
$a %= $b | $a = $a % $b |
$a .= $b | $a = $a . $b (string append) |
<?php
$total = 100;
$total += 20; // 120
$total -= 50; // 70
$total *= 2; // 140
echo $total; // 140Операторы сравнения
Операторы сравнения сравнивают два значения и возвращают boolean (true или false). Обратите внимание на важное различие между нестрогим (==) и строгим (===) сравнением.
| Оператор | Название | true, когда... |
|---|---|---|
== | Равно | значения равны после приведения типов |
=== | Идентично | значения и типы равны |
!= / <> | Не равно | значения не равны |
!== | Не идентично | значения или типы различаются |
< | Меньше | левое меньше |
> | Больше | левое больше |
<= | Меньше или равно | |
>= | Больше или равно |
<?php
var_dump(10 == "10"); // bool(true) — values match after juggling
var_dump(10 === "10"); // bool(false) — int vs string, types differ
var_dump(5 != 8); // bool(true)
var_dump(5 >= 5); // bool(true)Внимание: Предпочитайте
===, когда важны типы.0 == "abc"равноfalseв современном PHP (8.0+), но нестрогое сравнение по-прежнему имеет неожиданные крайние случаи — строгое сравнение их избегает.
Оператор «космический корабль» <=>
Оператор «космический корабль» сравнивает два значения и возвращает -1, 0 или 1. Чаще всего он используется как возвращаемое значение в функции обратного вызова сортировки.
<?php
echo 1 <=> 2; // -1 (left is smaller)
echo 2 <=> 2; // 0 (equal)
echo 3 <=> 2; // 1 (left is larger)Логические операторы
Логические операторы объединяют булевы выражения, обычно внутри условий if.
| Оператор | Название | true, когда... |
|---|---|---|
&& / and | И | оба операнда истинны |
|| / or | ИЛИ | хотя бы один операнд истинен |
! | НЕ | операнд ложен |
xor | Исключающее ИЛИ | ровно один операнд истинен |
<?php
$age = 25;
$hasLicense = true;
var_dump($age >= 18 && $hasLicense); // bool(true)
var_dump($age < 18 || $hasLicense); // bool(true)
var_dump(!$hasLicense); // bool(false)
&&иandведут себя одинаково в условиях, но имеют разный приоритет —and/orсвязывают слабее, чем=, что может удивить. Используйте&&и||.
PHP также поддерживает ленивые вычисления: в $a && expensive(), если $a равно false, правая часть никогда не вычисляется.
Операторы инкремента и декремента
Эти операторы прибавляют или вычитают 1 из переменной. Их позиция (пред- или пост-) изменяет то, что выражение возвращает.
| Оператор | Действие |
|---|---|
++$x | Пре-инкремент: увеличить, затем вернуть новое значение |
$x++ | Пост-инкремент: вернуть старое значение, затем увеличить |
--$x | Пре-декремент |
$x-- | Пост-декремент |
<?php
$x = 5;
echo $x++; // 5 (prints old value, then $x becomes 6)
echo $x; // 6
echo ++$x; // 7 (increments first, then prints)Строковые операторы
В PHP есть два оператора для работы со строками:
.— оператор конкатенации, объединяет две строки..=— оператор конкатенирующего присваивания, добавляет к переменной.
<?php
$greeting = "Hello";
$greeting .= ", World!"; // append
echo $greeting; // Hello, World!
echo "PHP" . " " . "rocks"; // PHP rocksОператоры массивов
Операторы массивов работают с целыми массивами.
| Оператор | Название | Описание |
|---|---|---|
+ | Объединение | ключи справа добавляются только если они отсутствуют слева |
== | Равенство | одинаковые пары ключ/значение |
=== | Идентичность | одинаковые пары, одинаковый порядок, одинаковые типы |
<?php
$a = ["a" => 1, "b" => 2];
$b = ["b" => 99, "c" => 3];
print_r($a + $b);
// Array ( [a] => 1 [b] => 2 [c] => 3 )
// "b" keeps the LEFT value (2), "c" is addedОператор нулевого объединения ??
Оператор ?? возвращает левый операнд, если он существует и не равен null, иначе — правый операнд. Это удобная замена проверкам isset().
<?php
$data = ["name" => "Ann"];
$name = $data["name"] ?? "Guest"; // "Ann"
$role = $data["role"] ?? "Member"; // "Member" — key missing, no warning
echo "$name / $role"; // Ann / MemberОператор ??= (присваивание с нулевым объединением) присваивает значение только тогда, когда переменная в данный момент равна null или не определена: $config["theme"] ??= "dark";.
Приоритет операторов
Когда в выражении смешиваются операторы, приоритет определяет, что выполняется первым — как в математике (* раньше +). Используйте скобки, чтобы явно указать намерение и переопределить порядок по умолчанию.
<?php
echo 2 + 3 * 4; // 14 — * binds tighter than +
echo (2 + 3) * 4; // 20 — parentheses force addition firstОт наивысшего к наименьшему, несколько ключевых уровней: **, затем !, затем * / %, затем + -, затем операторы сравнения (< > == ===), затем &&, затем || и наконец =. Если сомневаетесь, добавляйте скобки — они ничего не стоят и предотвращают ошибки.
Итог
- Арифметические (
+ - * / % **) работают с числами;/возвращает число с плавающей точкой,%— остаток. - Присваивания (
= += .=…) сохраняют и обновляют значения; составные формы — это сокращённая запись. - Сравнения (
== === != <=>) возвращают булевы значения — предпочитайте строгий===, чтобы избежать сюрпризов от приведения типов. - Логические (
&& || !) объединяют условия и поддерживают ленивые вычисления. - Инкремент/декремент (
++ --) различаются позицией — пред- или пост-. - Строковые (
. .=) объединяют текст; операторы массивов (+ == ===) сравнивают и объединяют массивы. ??предоставляет значения по умолчанию для отсутствующих значений; приоритет и скобки управляют порядком вычислений.
Далее примените эти операторы в условных операторах и циклах.