W3docs

Операторы PHP

Все типы операторов PHP: арифметические, сравнения, логические, строковые, массивов, космический корабль и нулевое объединение — с примерами и правилами приоритета.

Оператор принимает одно или несколько значений (называемых операндами) и порождает из них новое значение. Операторы — это строительные блоки каждого выражения в PHP: они позволяют выполнять арифметику, сравнивать значения, комбинировать булевы условия, присваивать результаты переменным и соединять строки.

В этой главе рассмотрены все категории операторов PHP с запускаемыми примерами: арифметические, присваивания, сравнения, логические, инкремент/декремент, строковые, массивов, оператор «космический корабль», оператор нулевого объединения, а также приоритет операторов, который определяет порядок вычислений.

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

Арифметические операторы выполняют привычные математические операции над числами.

ОператорНазваниеПримерРезультат
+Сложение10 + 515
-Вычитание10 - 55
*Умножение10 * 550
/Деление10 / 42.5
%Остаток от деления10 % 31
**Возведение в степень2 ** 416
<?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

От наивысшего к наименьшему, несколько ключевых уровней: **, затем !, затем * / %, затем + -, затем операторы сравнения (< > == ===), затем &&, затем || и наконец =. Если сомневаетесь, добавляйте скобки — они ничего не стоят и предотвращают ошибки.

Итог

  • Арифметические (+ - * / % **) работают с числами; / возвращает число с плавающей точкой, % — остаток.
  • Присваивания (= += .= …) сохраняют и обновляют значения; составные формы — это сокращённая запись.
  • Сравнения (== === != <=>) возвращают булевы значения — предпочитайте строгий ===, чтобы избежать сюрпризов от приведения типов.
  • Логические (&& || !) объединяют условия и поддерживают ленивые вычисления.
  • Инкремент/декремент (++ --) различаются позицией — пред- или пост-.
  • Строковые (. .=) объединяют текст; операторы массивов (+ == ===) сравнивают и объединяют массивы.
  • ?? предоставляет значения по умолчанию для отсутствующих значений; приоритет и скобки управляют порядком вычислений.

Далее примените эти операторы в условных операторах и циклах.

Практика

Практика
Какие из следующих являются допустимыми типами операторов в PHP?
Какие из следующих являются допустимыми типами операторов в PHP?
Was this page helpful?