Что означают различные символы и операторы синтаксиса PHP, включая &, &&, %, !!, @, ?:, ??, ?string, ?->, ::, ->, =>, ^, >>, <<, <<<, =, ==, ===, !==, !=, <>, <=>, |, ||, ~, +, +=, -=, ++, --, .=, ., , $$, `, <?=, [], <?, …, …, **, #, и #[]? Можете ли вы предоставить объяснения и примеры для каждого PHP оператора и символа с их соответствующими случаями использования в программировании?
Операторы и символы PHP являются фундаментальными строительными блоками, которые выполняют различные операции с переменными и значениями, от арифметических вычислений и логических сравнений до манипуляций со строками и операций с массивами. Каждый символ служит определенной цели, причем некоторые имеют несколько значений в зависимости от контекста, и понимание их необходимо для написания эффективного, читаемого и свободного от ошибок кода PHP. Это comprehensive руководство объяснит все операторы и символы PHP, которые вы перечислили, с практическими примерами и вариантами использования.
Содержание
- Арифметические операторы
- Операторы присваивания
- Операторы сравнения
- Логические операторы
- Операторы строк
- Операторы инкремента/декремента
- Операторы массивов
- Операторы типов
- Операторы контроля ошибок
- Операторы выполнения
- Другие важные символы
Арифметические операторы
Сложение (+)
Оператор + выполняет сложение двух числовых значений.
$a = 5 + 3; // $a = 8
$b = 10.5 + 2.3; // $b = 12.8
Вычитание (-)
Оператор - вычитает правый операнд из левого операнда.
$a = 10 - 4; // $a = 6
$b = 15.7 - 3.2; // $b = 12.5
Умножение (*)
Оператор * умножает два числовых значения.
$a = 6 * 7; // $a = 42
$b = 3.5 * 2; // $b = 7.0
Деление (/)
Оператор / делит левый операнд на правый операнд.
$a = 10 / 2; // $a = 5
$b = 7 / 2; // $a = 3.5 (деление с плавающей точкой)
Модуль (%)
Оператор % возвращает остаток от деления двух чисел.
$a = 10 % 3; // $a = 1 (10 разделить на 3 равно 3 с остатком 1)
$b = 8 % 4; // $b = 0 (8 разделить на 4 равно 2 с остатком 0)
$c = -7 % 3; // $a = -1 (с отрицательными числами работает иначе)
Возведение в степень (**)
Оператор ** возводит левый операнд в степень правого операнда.
$a = 2 ** 3; // $a = 8 (2^3)
$b = 4 ** 0.5; // $a = 2 (квадратный корень из 4)
$c = 5 ** -1; // $a = 0.2 (1/5)
Побитовый сдвиг влево (<<)
Оператор << сдвигает биты левого операнда влево на количество позиций, указанное правым операндом.
$a = 5 << 1; // $a = 10 (двоичное 101 << 1 = 1010)
$b = 8 << 3; // $a = 64 (двоичное 1000 << 3 = 1000000)
Побитовый сдвиг вправо (>>)
Оператор >> сдвигает биты левого операнда вправо на количество позиций, указанное правым операндом.
$a = 16 >> 2; // $a = 4 (двоичное 10000 >> 2 = 100)
$b = 32 >> 3; // $a = 4 (двоичное 100000 >> 3 = 100)
Побитовое НЕ (~)
Оператор ~ инвертирует все биты операнда.
$a = 5; // двоичное: 00000101
$b = ~$a; // $b = -6 (двоичное: 11111010)
Операторы присваивания
Присваивание (=)
Оператор = присваивает значение правого операнда левому операнду.
$name = "John";
$age = 25;
$price = 19.99;
Сложение с присваиванием (+=)
Оператор += добавляет правый операнд к левому операнду и присваивает результат левому операнду.
$a = 5;
$a += 3; // $a = 8 (эквивалентно $a = $a + 3)
Вычитание с присваиванием (-=)
Оператор -= вычитает правый операнд из левого операнда и присваивает результат левому операнду.
$a = 10;
$a -= 4; // $a = 6 (эквивалентно $a = $a - 4)
Умножение с присваиванием (*=)
Оператор *= умножает левый операнд на правый операнд и присваивает результат левому операнду.
$a = 6;
$a *= 7; // $a = 42 (эквивалентно $a = $a * 7)
Деление с присваиванием (/=)
Оператор /= делит левый операнд на правый операнд и присваивает результат левому операнду.
$a = 10;
$a /= 2; // $a = 5 (эквивалентно $a = $a / 2)
Модуль с присваиванием (%=)
Оператор %= вычисляет модуль левого операнда с правым операндом и присваивает результат левому операнду.
$a = 10;
$a %= 3; // $a = 1 (эквивалентно $a = $a % 3)
Конкатенация с присваиванием (.=)
Оператор .= объединяет правый операнд с левым операндом и присваивает результат левому операнду.
$text = "Hello";
$text .= " World"; // $text = "Hello World" (эквивалентно $text = $text . " World")
Побитовое И с присваиванием (&=)
Оператор &= выполняет побитовую операцию И между левым и правым операндами и присваивает результат левому операнду.
$a = 5; // двоичное: 0101
$a &= 3; // $a = 1 (двоичное: 0101 & 0011 = 0001)
Побитовое ИЛИ с присваиванием (|=)
Оператор |= выполняет побитовую операцию ИЛИ между левым и правым операндами и присваивает результат левому операнду.
$a = 5; // двоичное: 0101
$a |= 3; // $a = 7 (двоичное: 0101 | 0011 = 0111)
Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ с присваиванием (^=)
Оператор ^= выполняет побитовую операцию ИСКЛЮЧАЮЩЕЕ ИЛИ между левым и правым операндами и присваивает результат левому операнду.
$a = 5; // двоичное: 0101
$a ^= 3; // $a = 6 (двоичное: 0101 ^ 0011 = 0110)
Побитовый сдвиг влево с присваиванием (<<=)
Оператор <<= сдвигает биты левого операнда влево на количество позиций, указанное правым операндом, и присваивает результат левому операнду.
$a = 5;
$a <<= 1; // $a = 10 (эквивалентно $a = $a << 1)
Побитовый сдвиг вправо с присваиванием (>>=)
Оператор >>= сдвигает биты левого операнда вправо на количество позиций, указанное правым операндом, и присваивает результат левому операнду.
$a = 16;
$a >>= 2; // $a = 4 (эквивалентно $a = $a >> 2)
Операторы сравнения
Равно (==)
Оператор == проверяет, равны ли два значения после приведения типов.
5 == "5"; // true (строка "5" приводится к целому числу 5)
0 == "0"; // true
0 == false; // true (false приводится к 0)
"" == 0; // true (пустая строка приводится к 0)
Тождественно (===)
Оператор === проверяет, равны ли два значения и являются ли они одного типа.
5 === "5"; // false (разные типы)
5 === 5; // true (одинаковое значение и тип)
false === 0; // false (разные типы)
Не равно (!=)
Оператор != проверяет, не равны ли два значения после приведения типов.
5 != "5"; // false (значения равны после приведения)
5 != 6; // true
0 != "1"; // true
Не тождественно (!==)
Оператор !== проверяет, не равны ли два значения или не являются ли они одного типа.
5 !== "5"; // true (разные типы)
5 !== 5; // false (одинаковое значение и тип)
0 !== false; // true (разные типы)
Не равно (<>)
Оператор <> является псевдонимом для != - проверяет, не равны ли два значения после приведения типов.
5 <> "5"; // false (значения равны после приведения)
5 <> 6; // true
Космический корабль (<=>)
Оператор <=> (введен в PHP 7) возвращает -1, 0 или 1, когда левый операнд меньше, равен или больше правого операнда.
1 <=> 1; // 0
1 <=> 2; // -1
2 <=> 1; // 1
"a" <=> "b"; // -1
"b" <=> "a"; // 1
Меньше (<)
Оператор < проверяет, меньше ли левый операнд правого операнда.
5 < 10; // true
10 < 5; // false
"a" < "b"; // true (лексикографическое сравнение)
Больше (>)
Оператор > проверяет, больше ли левый операнд правого операнда.
10 > 5; // true
5 > 10; // false
"b" > "a"; // true (лексикографическое сравнение)
Меньше или равно (<=)
Оператор <= проверяет, меньше ли левый операнд правого операнда или равен ему.
5 <= 5; // true
5 <= 10; // true
10 <= 5; // false
Больше или равно (>=)
Оператор >= проверяет, больше ли левый операнд правого операнда или равен ему.
10 >= 10; // true
10 >= 5; // true
5 >= 10; // false
Логические операторы
И (&&)
Оператор && возвращает true только если оба операнда истинны.
true && true; // true
true && false; // false
false && true; // false
false && false; // false
// Короткое замыкание
$a = false;
$b = true;
if ($a && $b) { // $b не вычисляется, так как $a равно false
// код не выполняется
}
И (&)
Оператор & является побитовым И, который также работает как логический оператор, но не использует короткое замыкание.
true & true; // true
true & false; // false
false & true; // false
false & false; // false
ИЛИ (||)
Оператор || возвращает true, если хотя бы один из операндов истинен.
true || true; // true
true || false; // true
false || true; // true
false || false; // false
// Короткое замыкание
$a = true;
$b = false;
if ($a || $b) { // $b не вычисляется, так как $a равно true
// код выполняется
}
ИЛИ (|)
Оператор | является побитовым ИЛИ, который также работает как логический оператор, но не использует короткое замыкание.
true | true; // true
true | false; // true
false | true; // true
false | false; // false
ИСКЛЮЧАЮЩЕЕ ИЛИ (^)
Оператор ^ (при использовании как логический оператор) возвращает true, если только один из операндов истинен.
true ^ true; // false
true ^ false; // true
false ^ true; // true
false ^ false; // false
НЕ (!)
Оператор ! инвертирует логическое значение операнда.
!true; // false
!false; // true
!0; // true
!1; // false
!"hello"; // false
Двойное логическое НЕ (!!)
Оператор !! преобразует значение в его булев эквивалент.
!!true; // true
!!false; // false
!!0; // false
!!1; // true
!!"hello"; // true
!!""; // false
!!null; // false
Операторы строк
Конкатенация (.)
Оператор . объединяет две строки.
$a = "Hello";
$b = " World";
$c = $a . $b; // $c = "Hello World"
Конкатенация с присваиванием (.=)
Оператор .= добавляет правый операнд к левому операнду.
$text = "Hello";
$text .= " World"; // $text = "Hello World"
Диапазон строк (…)
Оператор .. создает строковую последовательность от начального до конечного значения.
$a = 'a'..'z'; // Создает строку, содержащую все строчные буквы
$b = 'A'..'Z'; // Создает строку, содержащую все заглавные буквы
Диапазон строк со шагом (… или …)
Оператор ... (PHP 8.0+) создает строковую последовательность со шагом.
$a = 'a'...'z'; // То же что .., но исключает конечное значение
$b = 'A'...'Z';
Операторы инкремента/декремента
Префиксный инкремент (++$var)
Оператор ++ увеличивает переменную перед использованием ее значения.
$a = 5;
$b = ++$a; // $a = 6, $b = 6
Постфиксный инкремент ($var++)
Оператор ++ увеличивает переменную после использования ее значения.
$a = 5;
$b = $a++; // $a = 6, $b = 5
Префиксный декремент (–$var)
Оператор -- уменьшает переменную перед использованием ее значения.
$a = 5;
$b = --$a; // $a = 4, $b = 4
Постфиксный декремент ($var–)
Оператор -- уменьшает переменную после использования ее значения.
$a = 5;
$b = $a--; // $a = 4, $b = 5
Операторы массивов
Объединение массивов (+)
Оператор + объединяет два массива, сохраняя значения из левого массива для дублирующихся ключей.
$a = [1, 2, 3];
$b = [3, 4, 5];
$c = $a + $b; // $c = [1, 2, 3] (дублирующийся ключ 3 сохраняет значение из $a)
Равенство массивов (==)
Оператор == проверяет, имеют ли массивы одинаковые пары ключ-значение.
$a = [1, 2, 3];
$b = [1, 2, 3];
$c = [1, 2, 4];
$a == $b; // true
$a == $c; // false
Тождество массивов (===)
Оператор === проверяет, имеют ли массивы одинаковые пары ключ-значение в том же порядке и того же типа.
$a = [1, 2, 3];
$b = [1, 2, 3];
$c = ["1", 2, 3]; // элемент 0 - строка, а не целое число
$a === $b; // true
$a === $c; // false
Не равно массивов (!=)
Оператор != проверяет, не имеют ли массивы одинаковых пар ключ-значение.
$a = [1, 2, 3];
$b = [1, 2, 4];
$a != $b; // true
Не тождественно массивов (!==)
Оператор !== проверяет, не имеют ли массивы одинаковых пар ключ-значение в том же порядке и того же типа.
$a = [1, 2, 3];
$b = [1, 2, "3"]; // элемент 2 - строка, а не целое число
$a !== $b; // true
Космический корабль для массивов (<=>)
Оператор <=> сравнивает массивы поэлементно.
$a = [1, 2, 3];
$b = [1, 2, 4];
$a <=> $b; // -1 (на элементе 2, 3 < 4)
$c = [1, 2, 3];
$d = [1, 2, 3];
$c <=> $d; // 0 (массивы равны)
$e = [1, 2, 5];
$f = [1, 2, 3];
$e <=> $f; // 1 (на элементе 2, 5 > 3)
Распространение массива ([…])
Оператор ... (PHP 7.4+) распределяет элементы массива в другой массив.
$a = [1, 2, 3];
$b = [4, 5, ...$a]; // $b = [4, 5, 1, 2, 3]
Конструктор массива ([])
Оператор [] создает пустой массив или массив с указанными элементами.
$a = []; // пустой массив
$b = [1, 2, 3]; // массив с элементами
$c = ["a" => 1, "b" => 2]; // ассоциативный массив
Операторы типов
Приведение типов (?)
Оператор ? перед именем типа в PHP 7.0+ указывает на объявление возвращаемого типа.
function add(int $a, int $b): int {
return $a + $b;
}
// PHP 7.0+ возвращаемый тип, допускающий null
function getName(): ?string {
return null; // может возвращать строку или null
}
Приведение типов (?->)
Оператор ?-> (PHP 8.0+) - это оператор безопасного доступа к свойству, который возвращает null, если объект равен null.
$user = null;
$name = $user?->name; // $name = null (без ошибки)
Приведение типов (?string)
Синтаксис ?string указывает на тип, допускающий null (может быть строкой или null).
function getName(): ?string {
return "John Doe"; // или return null;
}
Приведение типов (int), (string), (array) и т.д.
Операторы приведения типов преобразуют значения в определенные типы.
(int)"123"; // 123
(string)123; // "123"
(bool)0; // false
(bool)1; // true
(array)[1,2]; // [1, 2]
Операторы контроля ошибок
Подавление ошибок (@)
Оператор @ подавляет сообщения об ошибках для выражения, которое ему предшествует.
$file = @file("nonexistent.txt"); // Ошибки не отображаются, если файл не существует
if ($file === false) {
echo "Файл не найден";
}
Операторы выполнения
Обратные кавычки (`)
Оператор ` выполняет строку как команду оболочки и возвращает вывод.
$output = `ls -la`; // Выполняет команду ls -la и возвращает ее вывод
echo $output;
Другие важные символы
Доступ к элементу массива (->)
Оператор -> обращается к свойству объекта.
class Person {
public $name = "John";
public $age = 25;
}
$person = new Person();
echo $person->name; // "John"
echo $person->age; // 25
Доступ к статическому члену (::)
Оператор :: обращается к статическим свойствам и методам класса.
class Math {
public static $pi = 3.14159;
public static function add($a, $b) {
return $a + $b;
}
}
echo Math::$pi; // 3.14159
echo Math::add(5, 3); // 8
Присваивание списка (list())
Конструкция list() присваивает значения массива нескольким переменным.
$info = ["John", "Doe", 30];
list($firstName, $lastName, $age) = $info;
echo $firstName; // "John"
echo $lastName; // "Doe"
echo $age; // 30
Heredoc (<<<)
Оператор <<< создает многострочную строку.
$text = <<<HTML
<html>
<head><title>Test</title></head>
<body>Hello World</body>
</html>
HTML;
Короткий открывающий тег (<?=)
Оператор <?= выводит значение выражения (короткий тег echo).
<?= "Hello World" ?> // Выводит "Hello World"
Короткий открывающий тег (<?)
Оператор <? начинает блок PHP (требует включенный short_open_tag).
<?php
// PHP код
?>
<? // Альтернативный синтаксис для PHP кода
// PHP код
?>
Присваивание по ссылке (&)
Оператор & создает ссылку на переменную, а не копию.
$a = 5;
$b = &$a; // $b - это ссылка на $a
$a = 10; // $b теперь тоже 10
Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ (^)
Оператор ^ выполняет побитовую операцию ИСКЛЮЧАЮЩЕЕ ИЛИ.
$a = 5; // двоичное: 0101
$b = 3; // двоичное: 0011
$c = $a ^ $b; // $c = 6 (двоичное: 0110)
Побитовое И (&)
Оператор & выполняет побитовую операцию И.
$a = 5; // двоичное: 0101
$b = 3; // двоичное: 0011
$c = $a & $b; // $c = 1 (двоичное: 0001)
Побитовое ИЛИ (|)
Оператор | выполняет побитовую операцию ИЛИ.
$a = 5; // двоичное: 0101
$b = 3; // двоичное: 0011
$c = $a | $b; // $c = 7 (двоичное: 0111)
Тернарный оператор (?:)
Оператор ?: - это условный оператор, который возвращает одно из двух значений в зависимости от условия.
// Базовый тернарный
$age = 20;
$status = ($age >= 18) ? "Взрослый" : "Несовершеннолетний";
echo $status; // "Взрослый"
// Тернарный с объединением null (PHP 7.0+)
$name = $user['name'] ?? "Гость";
echo $name; // "Гость", если name равно null или не существует
Оператор объединения с null (??)
Оператор ?? возвращает первый операнд, если он существует и не равен null, в противном случае возвращает второй операнд.
// PHP 7.0+
$name = $user['name'] ?? "Гость";
echo $name; // "Гость", если name равно null или не существует
Космический корабль (<=>)
Оператор <=> сравнивает два значения и возвращает -1, 0 или 1.
// PHP 7.0+
$a = 10;
$b = 20;
$result = $a <=> $b; // -1 (a < b)
$a = 20;
$b = 20;
$result = $a <=> $b; // 0 (a == b)
$a = 30;
$b = 20;
$result = $a <=> $b; // 1 (a > b)
Заключение
Понимание операторов и символов PHP является фундаментальным для написания эффективного и эффективного кода. От базовых арифметических операций до сложных побитовых манипуляций, каждый оператор служит определенной цели, которая может значительно расширить ваши возможности программирования. Ключевые моменты, которые следует запомнить:
-
Важность приоритета операторов - PHP имеет определенный порядок, в котором вычисляются выражения, что может повлиять на ваши результаты, если это не правильно понять.
-
Приведение типов может быть коварным - Оператор
==выполняет приведение типов, в то время как===требует равенства как значения, так и типа, что приводит к разным результатам сравнения. -
Короткое замыкание - Логические операторы
&&и||оптимизируют код, не вычисляя правый операнд, когда результат может быть определен только по левому операнду. -
Объединение с null - мощный инструмент - Оператор
??упрощает проверку на null и предоставляет значения по умолчанию в чистом и читаемом виде. -
PHP 8.0+ вводит новые операторы - Оператор безопасной навигации
?->и другие современные операторы делают код более лаконичным и менее подверженным ошибкам.
Освоение этих операторов значительно улучшит ваши навыки программирования на PHP и позволит вам писать более элегантный, эффективный и поддерживаемый код. Практикуйтесь в использовании их в разных контекстах, чтобы полностью понять их поведение и применение.
Источники
- PHP: Операторы - Руководство
- PHP: Операторы сравнения - Руководство
- PHP: Арифметические операторы - Руководство
- PHP: Операторы строк - Руководство
- PHP: Логические операторы - Руководство
- PHP: Операторы инкремента/декремента - Руководство
- PHP: Операторы массивов - Руководство
- PHP: Операторы типов - Руководство
- PHP: Операторы контроля ошибок - Руководство
- PHP: Операторы выполнения - Руководство