НейроАгент

Операторы и символы PHP: Полное руководство с примерами

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

Вопрос

Что означают различные символы и операторы синтаксиса PHP, включая &, &&, %, !!, @, ?:, ??, ?string, ?->, ::, ->, =>, ^, >>, <<, <<<, =, ==, ===, !==, !=, <>, <=>, |, ||, ~, +, +=, -=, ++, --, .=, ., , $$, `, <?=, [], <?, …, …, **, #, и #[]? Можете ли вы предоставить объяснения и примеры для каждого PHP оператора и символа с их соответствующими случаями использования в программировании?

НейроАгент

Операторы и символы PHP являются фундаментальными строительными блоками, которые выполняют различные операции с переменными и значениями, от арифметических вычислений и логических сравнений до манипуляций со строками и операций с массивами. Каждый символ служит определенной цели, причем некоторые имеют несколько значений в зависимости от контекста, и понимание их необходимо для написания эффективного, читаемого и свободного от ошибок кода PHP. Это comprehensive руководство объяснит все операторы и символы PHP, которые вы перечислили, с практическими примерами и вариантами использования.

Содержание


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

Сложение (+)

Оператор + выполняет сложение двух числовых значений.

php
$a = 5 + 3;  // $a = 8
$b = 10.5 + 2.3;  // $b = 12.8

Вычитание (-)

Оператор - вычитает правый операнд из левого операнда.

php
$a = 10 - 4;  // $a = 6
$b = 15.7 - 3.2;  // $b = 12.5

Умножение (*)

Оператор * умножает два числовых значения.

php
$a = 6 * 7;  // $a = 42
$b = 3.5 * 2;  // $b = 7.0

Деление (/)

Оператор / делит левый операнд на правый операнд.

php
$a = 10 / 2;  // $a = 5
$b = 7 / 2;   // $a = 3.5 (деление с плавающей точкой)

Модуль (%)

Оператор % возвращает остаток от деления двух чисел.

php
$a = 10 % 3;   // $a = 1 (10 разделить на 3 равно 3 с остатком 1)
$b = 8 % 4;    // $b = 0 (8 разделить на 4 равно 2 с остатком 0)
$c = -7 % 3;   // $a = -1 (с отрицательными числами работает иначе)

Возведение в степень (**)

Оператор ** возводит левый операнд в степень правого операнда.

php
$a = 2 ** 3;   // $a = 8 (2^3)
$b = 4 ** 0.5; // $a = 2 (квадратный корень из 4)
$c = 5 ** -1;  // $a = 0.2 (1/5)

Побитовый сдвиг влево (<<)

Оператор << сдвигает биты левого операнда влево на количество позиций, указанное правым операндом.

php
$a = 5 << 1;   // $a = 10 (двоичное 101 << 1 = 1010)
$b = 8 << 3;   // $a = 64 (двоичное 1000 << 3 = 1000000)

Побитовый сдвиг вправо (>>)

Оператор >> сдвигает биты левого операнда вправо на количество позиций, указанное правым операндом.

php
$a = 16 >> 2;  // $a = 4 (двоичное 10000 >> 2 = 100)
$b = 32 >> 3;  // $a = 4 (двоичное 100000 >> 3 = 100)

Побитовое НЕ (~)

Оператор ~ инвертирует все биты операнда.

php
$a = 5;        // двоичное: 00000101
$b = ~$a;      // $b = -6 (двоичное: 11111010)

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

Присваивание (=)

Оператор = присваивает значение правого операнда левому операнду.

php
$name = "John";
$age = 25;
$price = 19.99;

Сложение с присваиванием (+=)

Оператор += добавляет правый операнд к левому операнду и присваивает результат левому операнду.

php
$a = 5;
$a += 3;  // $a = 8 (эквивалентно $a = $a + 3)

Вычитание с присваиванием (-=)

Оператор -= вычитает правый операнд из левого операнда и присваивает результат левому операнду.

php
$a = 10;
$a -= 4;  // $a = 6 (эквивалентно $a = $a - 4)

Умножение с присваиванием (*=)

Оператор *= умножает левый операнд на правый операнд и присваивает результат левому операнду.

php
$a = 6;
$a *= 7;  // $a = 42 (эквивалентно $a = $a * 7)

Деление с присваиванием (/=)

Оператор /= делит левый операнд на правый операнд и присваивает результат левому операнду.

php
$a = 10;
$a /= 2;  // $a = 5 (эквивалентно $a = $a / 2)

Модуль с присваиванием (%=)

Оператор %= вычисляет модуль левого операнда с правым операндом и присваивает результат левому операнду.

php
$a = 10;
$a %= 3;  // $a = 1 (эквивалентно $a = $a % 3)

Конкатенация с присваиванием (.=)

Оператор .= объединяет правый операнд с левым операндом и присваивает результат левому операнду.

php
$text = "Hello";
$text .= " World";  // $text = "Hello World" (эквивалентно $text = $text . " World")

Побитовое И с присваиванием (&=)

Оператор &= выполняет побитовую операцию И между левым и правым операндами и присваивает результат левому операнду.

php
$a = 5;   // двоичное: 0101
$a &= 3;  // $a = 1 (двоичное: 0101 & 0011 = 0001)

Побитовое ИЛИ с присваиванием (|=)

Оператор |= выполняет побитовую операцию ИЛИ между левым и правым операндами и присваивает результат левому операнду.

php
$a = 5;   // двоичное: 0101
$a |= 3;  // $a = 7 (двоичное: 0101 | 0011 = 0111)

Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ с присваиванием (^=)

Оператор ^= выполняет побитовую операцию ИСКЛЮЧАЮЩЕЕ ИЛИ между левым и правым операндами и присваивает результат левому операнду.

php
$a = 5;   // двоичное: 0101
$a ^= 3;  // $a = 6 (двоичное: 0101 ^ 0011 = 0110)

Побитовый сдвиг влево с присваиванием (<<=)

Оператор <<= сдвигает биты левого операнда влево на количество позиций, указанное правым операндом, и присваивает результат левому операнду.

php
$a = 5;
$a <<= 1;  // $a = 10 (эквивалентно $a = $a << 1)

Побитовый сдвиг вправо с присваиванием (>>=)

Оператор >>= сдвигает биты левого операнда вправо на количество позиций, указанное правым операндом, и присваивает результат левому операнду.

php
$a = 16;
$a >>= 2;  // $a = 4 (эквивалентно $a = $a >> 2)

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

Равно (==)

Оператор == проверяет, равны ли два значения после приведения типов.

php
5 == "5";     // true (строка "5" приводится к целому числу 5)
0 == "0";     // true
0 == false;   // true (false приводится к 0)
"" == 0;      // true (пустая строка приводится к 0)

Тождественно (===)

Оператор === проверяет, равны ли два значения и являются ли они одного типа.

php
5 === "5";    // false (разные типы)
5 === 5;      // true (одинаковое значение и тип)
false === 0;  // false (разные типы)

Не равно (!=)

Оператор != проверяет, не равны ли два значения после приведения типов.

php
5 != "5";     // false (значения равны после приведения)
5 != 6;       // true
0 != "1";     // true

Не тождественно (!==)

Оператор !== проверяет, не равны ли два значения или не являются ли они одного типа.

php
5 !== "5";    // true (разные типы)
5 !== 5;      // false (одинаковое значение и тип)
0 !== false;  // true (разные типы)

Не равно (<>)

Оператор <> является псевдонимом для != - проверяет, не равны ли два значения после приведения типов.

php
5 <> "5";     // false (значения равны после приведения)
5 <> 6;       // true

Космический корабль (<=>)

Оператор <=> (введен в PHP 7) возвращает -1, 0 или 1, когда левый операнд меньше, равен или больше правого операнда.

php
1 <=> 1;   // 0
1 <=> 2;   // -1
2 <=> 1;   // 1
"a" <=> "b";  // -1
"b" <=> "a";  // 1

Меньше (<)

Оператор < проверяет, меньше ли левый операнд правого операнда.

php
5 < 10;    // true
10 < 5;    // false
"a" < "b"; // true (лексикографическое сравнение)

Больше (>)

Оператор > проверяет, больше ли левый операнд правого операнда.

php
10 > 5;    // true
5 > 10;    // false
"b" > "a"; // true (лексикографическое сравнение)

Меньше или равно (<=)

Оператор <= проверяет, меньше ли левый операнд правого операнда или равен ему.

php
5 <= 5;    // true
5 <= 10;   // true
10 <= 5;   // false

Больше или равно (>=)

Оператор >= проверяет, больше ли левый операнд правого операнда или равен ему.

php
10 >= 10;  // true
10 >= 5;   // true
5 >= 10;   // false

Логические операторы

И (&&)

Оператор && возвращает true только если оба операнда истинны.

php
true && true;   // true
true && false;  // false
false && true;  // false
false && false; // false

// Короткое замыкание
$a = false;
$b = true;
if ($a && $b) {  // $b не вычисляется, так как $a равно false
    // код не выполняется
}

И (&)

Оператор & является побитовым И, который также работает как логический оператор, но не использует короткое замыкание.

php
true & true;   // true
true & false;  // false
false & true;  // false
false & false; // false

ИЛИ (||)

Оператор || возвращает true, если хотя бы один из операндов истинен.

php
true || true;   // true
true || false;  // true
false || true;  // true
false || false; // false

// Короткое замыкание
$a = true;
$b = false;
if ($a || $b) {  // $b не вычисляется, так как $a равно true
    // код выполняется
}

ИЛИ (|)

Оператор | является побитовым ИЛИ, который также работает как логический оператор, но не использует короткое замыкание.

php
true | true;   // true
true | false;  // true
false | true;  // true
false | false; // false

ИСКЛЮЧАЮЩЕЕ ИЛИ (^)

Оператор ^ (при использовании как логический оператор) возвращает true, если только один из операндов истинен.

php
true ^ true;   // false
true ^ false;  // true
false ^ true;  // true
false ^ false; // false

НЕ (!)

Оператор ! инвертирует логическое значение операнда.

php
!true;  // false
!false; // true
!0;     // true
!1;     // false
!"hello"; // false

Двойное логическое НЕ (!!)

Оператор !! преобразует значение в его булев эквивалент.

php
!!true;   // true
!!false;  // false
!!0;      // false
!!1;      // true
!!"hello"; // true
!!"";     // false
!!null;   // false

Операторы строк

Конкатенация (.)

Оператор . объединяет две строки.

php
$a = "Hello";
$b = " World";
$c = $a . $b;  // $c = "Hello World"

Конкатенация с присваиванием (.=)

Оператор .= добавляет правый операнд к левому операнду.

php
$text = "Hello";
$text .= " World";  // $text = "Hello World"

Диапазон строк (…)

Оператор .. создает строковую последовательность от начального до конечного значения.

php
$a = 'a'..'z';  // Создает строку, содержащую все строчные буквы
$b = 'A'..'Z';  // Создает строку, содержащую все заглавные буквы

Диапазон строк со шагом (… или …)

Оператор ... (PHP 8.0+) создает строковую последовательность со шагом.

php
$a = 'a'...'z';  // То же что .., но исключает конечное значение
$b = 'A'...'Z';

Операторы инкремента/декремента

Префиксный инкремент (++$var)

Оператор ++ увеличивает переменную перед использованием ее значения.

php
$a = 5;
$b = ++$a;  // $a = 6, $b = 6

Постфиксный инкремент ($var++)

Оператор ++ увеличивает переменную после использования ее значения.

php
$a = 5;
$b = $a++;  // $a = 6, $b = 5

Префиксный декремент (–$var)

Оператор -- уменьшает переменную перед использованием ее значения.

php
$a = 5;
$b = --$a;  // $a = 4, $b = 4

Постфиксный декремент ($var–)

Оператор -- уменьшает переменную после использования ее значения.

php
$a = 5;
$b = $a--;  // $a = 4, $b = 5

Операторы массивов

Объединение массивов (+)

Оператор + объединяет два массива, сохраняя значения из левого массива для дублирующихся ключей.

php
$a = [1, 2, 3];
$b = [3, 4, 5];
$c = $a + $b;  // $c = [1, 2, 3] (дублирующийся ключ 3 сохраняет значение из $a)

Равенство массивов (==)

Оператор == проверяет, имеют ли массивы одинаковые пары ключ-значение.

php
$a = [1, 2, 3];
$b = [1, 2, 3];
$c = [1, 2, 4];
$a == $b;  // true
$a == $c;  // false

Тождество массивов (===)

Оператор === проверяет, имеют ли массивы одинаковые пары ключ-значение в том же порядке и того же типа.

php
$a = [1, 2, 3];
$b = [1, 2, 3];
$c = ["1", 2, 3];  // элемент 0 - строка, а не целое число
$a === $b;  // true
$a === $c;  // false

Не равно массивов (!=)

Оператор != проверяет, не имеют ли массивы одинаковых пар ключ-значение.

php
$a = [1, 2, 3];
$b = [1, 2, 4];
$a != $b;  // true

Не тождественно массивов (!==)

Оператор !== проверяет, не имеют ли массивы одинаковых пар ключ-значение в том же порядке и того же типа.

php
$a = [1, 2, 3];
$b = [1, 2, "3"];  // элемент 2 - строка, а не целое число
$a !== $b;  // true

Космический корабль для массивов (<=>)

Оператор <=> сравнивает массивы поэлементно.

php
$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+) распределяет элементы массива в другой массив.

php
$a = [1, 2, 3];
$b = [4, 5, ...$a];  // $b = [4, 5, 1, 2, 3]

Конструктор массива ([])

Оператор [] создает пустой массив или массив с указанными элементами.

php
$a = [];          // пустой массив
$b = [1, 2, 3];   // массив с элементами
$c = ["a" => 1, "b" => 2];  // ассоциативный массив

Операторы типов

Приведение типов (?)

Оператор ? перед именем типа в PHP 7.0+ указывает на объявление возвращаемого типа.

php
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.

php
$user = null;
$name = $user?->name;  // $name = null (без ошибки)

Приведение типов (?string)

Синтаксис ?string указывает на тип, допускающий null (может быть строкой или null).

php
function getName(): ?string {
    return "John Doe";  // или return null;
}

Приведение типов (int), (string), (array) и т.д.

Операторы приведения типов преобразуют значения в определенные типы.

php
(int)"123";    // 123
(string)123;   // "123"
(bool)0;       // false
(bool)1;       // true
(array)[1,2];  // [1, 2]

Операторы контроля ошибок

Подавление ошибок (@)

Оператор @ подавляет сообщения об ошибках для выражения, которое ему предшествует.

php
$file = @file("nonexistent.txt");  // Ошибки не отображаются, если файл не существует
if ($file === false) {
    echo "Файл не найден";
}

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

Обратные кавычки (`)

Оператор ` выполняет строку как команду оболочки и возвращает вывод.

php
$output = `ls -la`;  // Выполняет команду ls -la и возвращает ее вывод
echo $output;

Другие важные символы

Доступ к элементу массива (->)

Оператор -> обращается к свойству объекта.

php
class Person {
    public $name = "John";
    public $age = 25;
}

$person = new Person();
echo $person->name;  // "John"
echo $person->age;   // 25

Доступ к статическому члену (::)

Оператор :: обращается к статическим свойствам и методам класса.

php
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() присваивает значения массива нескольким переменным.

php
$info = ["John", "Doe", 30];
list($firstName, $lastName, $age) = $info;
echo $firstName;  // "John"
echo $lastName;   // "Doe"
echo $age;        // 30

Heredoc (<<<)

Оператор <<< создает многострочную строку.

php
$text = <<<HTML
    <html>
    <head><title>Test</title></head>
    <body>Hello World</body>
    </html>
HTML;

Короткий открывающий тег (<?=)

Оператор <?= выводит значение выражения (короткий тег echo).

php
<?= "Hello World" ?>  // Выводит "Hello World"

Короткий открывающий тег (<?)

Оператор <? начинает блок PHP (требует включенный short_open_tag).

php
<?php
    // PHP код
?>
<?  // Альтернативный синтаксис для PHP кода
    // PHP код
?>

Присваивание по ссылке (&)

Оператор & создает ссылку на переменную, а не копию.

php
$a = 5;
$b = &$a;  // $b - это ссылка на $a
$a = 10;   // $b теперь тоже 10

Побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ (^)

Оператор ^ выполняет побитовую операцию ИСКЛЮЧАЮЩЕЕ ИЛИ.

php
$a = 5;   // двоичное: 0101
$b = 3;   // двоичное: 0011
$c = $a ^ $b;  // $c = 6 (двоичное: 0110)

Побитовое И (&)

Оператор & выполняет побитовую операцию И.

php
$a = 5;   // двоичное: 0101
$b = 3;   // двоичное: 0011
$c = $a & $b;  // $c = 1 (двоичное: 0001)

Побитовое ИЛИ (|)

Оператор | выполняет побитовую операцию ИЛИ.

php
$a = 5;   // двоичное: 0101
$b = 3;   // двоичное: 0011
$c = $a | $b;  // $c = 7 (двоичное: 0111)

Тернарный оператор (?:)

Оператор ?: - это условный оператор, который возвращает одно из двух значений в зависимости от условия.

php
// Базовый тернарный
$age = 20;
$status = ($age >= 18) ? "Взрослый" : "Несовершеннолетний";
echo $status;  // "Взрослый"

// Тернарный с объединением null (PHP 7.0+)
$name = $user['name'] ?? "Гость";
echo $name;  // "Гость", если name равно null или не существует

Оператор объединения с null (??)

Оператор ?? возвращает первый операнд, если он существует и не равен null, в противном случае возвращает второй операнд.

php
// PHP 7.0+
$name = $user['name'] ?? "Гость";
echo $name;  // "Гость", если name равно null или не существует

Космический корабль (<=>)

Оператор <=> сравнивает два значения и возвращает -1, 0 или 1.

php
// 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 является фундаментальным для написания эффективного и эффективного кода. От базовых арифметических операций до сложных побитовых манипуляций, каждый оператор служит определенной цели, которая может значительно расширить ваши возможности программирования. Ключевые моменты, которые следует запомнить:

  1. Важность приоритета операторов - PHP имеет определенный порядок, в котором вычисляются выражения, что может повлиять на ваши результаты, если это не правильно понять.

  2. Приведение типов может быть коварным - Оператор == выполняет приведение типов, в то время как === требует равенства как значения, так и типа, что приводит к разным результатам сравнения.

  3. Короткое замыкание - Логические операторы && и || оптимизируют код, не вычисляя правый операнд, когда результат может быть определен только по левому операнду.

  4. Объединение с null - мощный инструмент - Оператор ?? упрощает проверку на null и предоставляет значения по умолчанию в чистом и читаемом виде.

  5. PHP 8.0+ вводит новые операторы - Оператор безопасной навигации ?-> и другие современные операторы делают код более лаконичным и менее подверженным ошибкам.

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

Источники

  1. PHP: Операторы - Руководство
  2. PHP: Операторы сравнения - Руководство
  3. PHP: Арифметические операторы - Руководство
  4. PHP: Операторы строк - Руководство
  5. PHP: Логические операторы - Руководство
  6. PHP: Операторы инкремента/декремента - Руководство
  7. PHP: Операторы массивов - Руководство
  8. PHP: Операторы типов - Руководство
  9. PHP: Операторы контроля ошибок - Руководство
  10. PHP: Операторы выполнения - Руководство