Перейти к основному содержимому

Синтаксис, операторы и пунктуация в PHP

Разработчику Архитектору

Перед чтением: Операторы — общие понятия оператора, операнда, приоритетов и типов операций без привязки к языку. Названия символов: Знаки препинания и символы в IT.


Знаки препинания, операторы и синтаксические символы в PHP

Play ITЗагрузка интерактивного демо…


Зачем это изучать в начале

Этот раздел часто воспринимают как "формальности", но именно на синтаксисе обычно ломается ранняя практика:

  • пропущенная ; останавливает выполнение файла;
  • перепутанные " и ' меняют итоговые строки;
  • смешивание and и && даёт неожиданный результат из-за приоритета;
  • неверное использование ??, ?: и ? : приводит к логическим ошибкам.

Поэтому цель статьи не просто перечислить символы, а дать рабочие привычки чтения и написания PHP-кода.


Обзор синтаксических элементов

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


Точка с запятой

Точка с запятой завершает каждую исполняемую инструкцию в PHP. Этот символ сообщает интерпретатору о завершении текущей операции и готовности к следующей.

$name = "Maria";
$age = 28;
echo $name;
calculateTotal();

Разбор:

  • Здесь показаны отдельные инструкции, каждая заканчивается ; и исполняется последовательно сверху вниз.
  • $name и $age объявляют переменные с присваиванием строкового и числового значения.
  • echo $name; отправляет значение переменной в выходной поток (в браузер или консоль, в зависимости от режима запуска).
  • calculateTotal(); демонстрирует вызов функции без аргументов.
  • Пример подчёркивает, что отсутствие ; после любой инструкции вызовет синтаксическую ошибку.

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


Запятая

Запятая разделяет элементы в списках — аргументы функций, значения массивов, параметры циклов, свойства объектов.

Код ITЗагрузка примера кода…

Разбор:

  • В сигнатуре createUser($name, $email, $role) запятые разделяют параметры функции.
  • В массиве ["red", "green", "blue"] запятые разделяют элементы списка.
  • В list(...) запятые задают, в какие переменные по порядку распакуются значения массива.
  • Запятая здесь не выполняет вычисление, а только задаёт структуру данных/аргументов.
  • Такой синтаксис встречается повсюду — в массивах, параметрах, аргументах и перечислениях.

Запятая не выполняет вычислений, она служит разделителем синтаксических конструкций.


Точка

Точка выполняет конкатенацию строк. Оператор объединяет два строковых значения в одно.

$greeting = "Hello";
$name = "Alex";
$message = $greeting . ", " . $name . "!"; // Hello, Alex!

Разбор:

  • Оператор . склеивает строковые фрагменты в одну итоговую строку.
  • Выражение вычисляется слева направо: сначала $greeting . ", ", затем добавляется $name, потом "!".
  • Результат сохраняется в $message, а не выводится автоматически.
  • Конкатенация полезна, когда строка собирается из нескольких переменных и литералов.
  • Для накопления строки по шагам обычно применяют форму .= (конкатенация с присваиванием).

Точка работает с любыми типами данных, преобразуя их в строки при объединении. Числа, булевы значения и null автоматически приводятся к строковому представлению.

$result = "Score: " . 95; // Score: 95
$status = "Active: " . true; // Active: 1
$empty = "Value: " . null; // Value:

Разбор:

  • PHP автоматически приводит нестроковые типы к строке при конкатенации.
  • Число 95 становится "95", поэтому получаем Score: 95.
  • true приводится к "1", а false — к пустой строке.
  • null также превращается в пустую строку.
  • Из-за таких преобразований важно явно форматировать значения, если критична точность вывода.

Кавычки

Одинарные кавычки

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

$name = 'Peter';
$text = 'Hello, $name'; // Hello, $name
$escaped = 'It\'s a quote'; // It's a quote

Разбор:

  • В одинарных кавычках переменные не интерполируются, поэтому $name остаётся буквальным текстом.
  • \' экранирует одинарную кавычку внутри строкового литерала.
  • Такой формат подходит для статичных строк, где не нужен разбор спецпоследовательностей.
  • Внутри '...' почти всё трактуется буквально, кроме \\ и \'.
  • Это снижает риск неожиданной подстановки переменных.

Внутри одинарных кавычек обрабатываются только две последовательности: \\ для обратного слеша и \' для одинарной кавычки.


Двойные кавычки

Двойные кавычки поддерживают интерполяцию переменных и обработку управляющих последовательностей.

$name = "Peter";
$text = "Hello, $name"; // Hello, Peter

// Управляющие последовательности
$newline = "Line 1\nLine 2";
$tab = "Column 1\tColumn 2";
$path = "C:\\xampp\\htdocs";

Разбор:

  • В двойных кавычках PHP подставляет значения переменных ($name) прямо в строку.
  • Последовательности \n и \t интерпретируются как перевод строки и табуляция.
  • \\ используется для вывода обратного слеша в путях Windows.
  • Такой формат удобен для шаблонных строк, но требует аккуратности с экранированием.
  • Для сложной подстановки (массивы/выражения) лучше использовать {...}.

Интерполяция работает с простыми переменными и массивами. Для сложных выражений используются фигурные скобки.

$user = ["name" => "Anna"];
echo "User: $user[name]"; // User: Anna
echo "Name: {$user['name']}"; // Name: Anna
echo "Next year: {$year + 1}"; // требуется фигурная скобка

Разбор:

  • Пример показывает интерполяцию массива и выражений внутри двойных кавычек.
  • Форма $user[name] работает, но может быть неочевидной и чувствительной к контексту.
  • Форма {$user['name']} более явная и безопасная для чтения.
  • Для вычислений внутри строки ({$year + 1}) фигурные скобки обязательны.
  • Рекомендация: использовать {...} для всего, что сложнее простой переменной.

Интерполяция переменной в строке:

"<текст> $<переменная> <текст>"
"<текст> {$<выражение>} <текст>"


Апостроф

Апостроф (') в типографском смысле отличается от одинарной кавычки по коду символа. В коде PHP используются только одинарные кавычки с кодом ASCII 39. Типографские апострофы (' или ) вызывают синтаксическую ошибку.

// Ошибка: используются типографские кавычки
// $text = 'It's wrong';

// Правильно: экранирование или двойные кавычки
$text = 'It\'s correct';
$text = "It's correct";

Разбор:

  • В PHP-коде допустимы обычные ASCII-кавычки, а не типографские символы из текстовых редакторов.
  • Строка 'It\'s correct' использует экранирование апострофа внутри одинарных кавычек.
  • Альтернатива "It's correct" позволяет не экранировать апостроф.
  • Неправильные кавычки часто появляются после копирования из документов/мессенджеров.
  • При странных синтаксических ошибках стоит проверить кодировку и тип кавычек.

Скобки

Круглые скобки

Круглые скобки группируют выражения, определяют приоритет операций, ограничивают аргументы функций и условия в управляющих конструкциях.

// Группировка выражений
$result = (5 + 3) * 2; // 16

// Аргументы функции
calculate((int)$input);

// Условия
if ($age > 18 && ($status === 'active' || $status === 'premium')) {
// доступ разрешён
}

Разбор:

  • Круглые скобки явно управляют приоритетом вычисления ((5 + 3) считается раньше умножения).
  • В calculate((int)$input) скобки задают аргумент функции и область приведения типа.
  • В if (...) скобки обязательны и содержат булево условие.
  • Внутренние скобки в условии группируют логическое или, повышая читаемость.
  • Такая запись уменьшает риск ошибок из-за неочевидного приоритета операторов.

Вызов функции:

<функция>(<аргумент1>, <аргумент2>, ...);

Объявление функции:

function <имя>(<параметр1>, <параметр2>, ...) {
// тело функции
}

Объявление анонимной функции:

$<имя> = function(<параметры>) { /* тело */ };

Стрелочная функция:

$<имя> = fn(<параметр>) => <выражение>;

Объявление глобальной константы:

define("<ИМЯ>", <значение>);

Использование константы:

<ИМЯ> или constant("<ИМЯ>")


Квадратные скобки

Квадратные скобки обращаются к элементам массивов и строк по индексу, определяют литералы массивов.

// Доступ к элементу массива
$users[0] = "John";
echo $users[0];

// Доступ к символу строки
$word = "hello";
echo $word[1]; // e

// Литерал массива
$items = [10, 20, 30];
$assoc = ["key" => "value"];

Разбор:

  • $users[0] обращается к элементу индексированного массива по числовому ключу.
  • $word[1] показывает, что к строке тоже можно обращаться как к массиву символов.
  • Литерал [10, 20, 30] создаёт обычный индексированный массив.
  • Литерал ["key" => "value"] создаёт ассоциативный массив с именованными ключами.
  • Квадратные скобки в PHP используются и для доступа, и для объявления массивов.

Современный синтаксис использует квадратные скобки для всех операций с массивами. Старый синтаксис с array() остаётся поддерживаемым.

Объявление массива (индексированный):

$<имя> = [<элемент1>, <элемент2>, ...];

Объявление ассоциативного массива:

$<имя> = ["<ключ1>" => <значение1>, "<ключ2>" => <значение2>];

Доступ к элементу массива:

$<значение> = $<массив>[<индекс>];
$<значение> = $<массив>["<ключ>"];


Фигурные скобки

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

Код ITЗагрузка примера кода…

Разбор:

  • Фигурные скобки ограничивают тело функции, условия и другие блоки управления.
  • Внутри блока можно объявлять локальные переменные и выполнять несколько инструкций.
  • В строке {$prices[0] * 1.2} фигурные скобки позволяют вычислить выражение перед выводом.
  • Без фигурных скобок интерполяция сложных выражений была бы неоднозначной.
  • Этот символ одновременно структурирует код и помогает формировать динамический текст.

Комментарии

Комментарии игнорируются интерпретатором и служат для пояснения кода разработчикам.


Однострочные комментарии

Два стиля однострочных комментариев: двойной слеш и символ решётки.

// Расчёт итоговой суммы
$subtotal = $price * $quantity;

# Устаревший стиль, редко используется
$tax = $subtotal * 0.2;

Разбор:

  • // и # создают однострочные комментарии, которые игнорируются интерпретатором.
  • Комментарий действует до конца строки и не влияет на выполнение кода.
  • # поддерживается, но в проектах чаще используют // ради единообразия.
  • Комментарии полезны для пояснения причины решения, а не повторения очевидной строки.
  • Чрезмерные комментарии могут снижать читаемость, поэтому лучше писать коротко и по делу.

Комментарий продолжается до конца строки. Точка с запятой после комментария не требуется.

Однострочный комментарий:

// <комментарий>

Альтернативный однострочный комментарий:

# <комментарий>


Многострочные комментарии

Многострочные комментарии начинаются с /* и заканчиваются */. Они могут занимать несколько строк и встраиваться в середину выражений.

/*
* Функция обработки заказа
* Версия: 2.1
* Автор: Иван Петров
*/
function processOrder($orderId) {
/* временно отключено */ $notify = false;
return execute($orderId);
}

Разбор:

  • /* ... */ оформляет многострочный комментарий для подробных пояснений и документации.
  • Такой формат часто используют перед функциями/классами для описания назначения и параметров.
  • Комментарий /* временно отключено */ может быть встроен прямо в строку кода.
  • Вложенные многострочные комментарии недопустимы и ломают парсинг.
  • Важно закрывать */, иначе интерпретатор сочтёт весь оставшийся код комментарием.

Вложенные многострочные комментарии недопустимы и вызывают ошибку синтаксического анализа.

Многострочный комментарий:

/*
<комментарий>
*/

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

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

$a = 10;
$b = 3;

$sum = $a + $b; // 13 сложение
$diff = $a - $b; // 7 вычитание
$product = $a * $b; // 30 умножение
$quotient = $a / $b; // 3.333 деление
$mod = $a % $b; // 1 остаток от деления
$pow = $a ** $b; // 1000 возведение в степень

Разбор:

  • Показаны базовые арифметические операторы — +, -, *, /, %, **.
  • % возвращает остаток от деления и часто используется для проверок кратности.
  • / в PHP может вернуть дробный результат, даже если операнды целые.
  • ** выполняет возведение в степень (в примере 10 ** 3 = 1000).
  • Все выражения сохраняются в переменные, что упрощает дальнейшую обработку.

Оператор остатка % возвращает остаток после целочисленного деления. Для отрицательных чисел знак результата совпадает со знаком делимого.

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

$<результат> = $<a> + $<b>;
$<результат> = $<a> - $<b>;
$<результат> = $<a> * $<b>;
$<результат> = $<a> / $<b>;
$<результат> = $<a> % $<b>;
$<результат> = $<a> ** $<b>;

Конкатенация строк:

$<результат> = $<строка1> . $<строка2>;


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

Оператор присваивания = сохраняет значение справа в переменную слева. Составные операторы объединяют арифметическую операцию с присваиванием.

$x = 5; // простое присваивание
$x += 3; // $x = $x + 3; результат: 8
$x -= 2; // $x = $x - 2; результат: 6
$x *= 4; // $x = $x * 4; результат: 24
$x /= 2; // $x = $x / 2; результат: 12
$x %= 5; // $x = $x % 5; результат: 2
$x **= 3; // $x = $x ** 3; результат: 8

Разбор:

  • = присваивает значение переменной, а составные формы (+=, *=, и т.д.) сокращают запись.
  • += эквивалентно x = x + ..., -=x = x - ..., и так далее.
  • Такие операторы читаются как "изменить текущую переменную на основе её прошлого значения".
  • Они уменьшают шум в коде и снижают шанс ошибиться в повторении имени переменной.
  • **= объединяет возведение в степень и присваивание за одну операцию.

Оператор присваивания возвращает присвоенное значение, что позволяет строить цепочки присваиваний.

$a = $b = $c = 10; // все три переменные равны 10

Разбор:

  • Это цепочка присваиваний: вычисление идёт справа налево.
  • Сначала 10 присваивается $c, затем результат присваивается $b, потом $a.
  • Приём удобен для инициализации нескольких переменных одинаковым значением.
  • В сложной логике лучше использовать аккуратно, чтобы не ухудшать читаемость.

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

$<переменная> += <значение>;
$<переменная> -= <значение>;
$<переменная> *= <значение>;
$<переменная> /= <значение>;
$<переменная> %= <значение>;
$<переменная> **= <значение>;

Создание объекта:

$<объект> = new <Класс>(<аргументы>);

Объявление константы класса:

const <ИМЯ> = <значение>;


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

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

$a = 5;
$b = "5";

$a == $b; // true равенство с приведением типов
$a === $b; // false строгое равенство без приведения
$a != $b; // false неравенство с приведением
$a !== $b; // true строгое неравенство
$a < $b; // false меньше
$a > $b; // false больше
$a <= $b; // true меньше или равно
$a >= $b; // true больше или равно

Разбор:

  • == и != сравнивают с автоприведением типов, поэтому 5 и "5" считаются равными.
  • === и !== сравнивают и значение, и тип, что делает проверки надёжнее.
  • Операторы <, >, <=, >= выполняют порядковое сравнение.
  • В реальных проверках условий лучше предпочитать строгие операторы, чтобы избежать скрытых багов.
  • Пример показывает, как один и тот же набор данных даёт разный итог в зависимости от оператора.

Строгие операторы === и !== проверяют совпадение как значения, так и типа данных. Использование строгих сравнений предотвращает неочевидные ошибки, связанные с автоматическим приведением типов.

Сравнения:

$<результат> = $<a> == $<b>;
$<результат> = $<a> === $<b>;
$<результат> = $<a> != $<b>;
$<результат> = $<a> !== $<b>;
$<результат> = $<a> < $<b>;
$<результат> = $<a> <= $<b>;
$<результат> = $<a> > $<b>;
$<результат> = $<a> >= $<b>;


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

Логические операторы объединяют булевы выражения.

$valid = true;
$active = false;

$valid && $active; // false логическое И
$valid || $active; // true логическое ИЛИ
!$valid; // false логическое НЕ

$valid and $active; // false альтернативный синтаксис И
$valid or $active; // true альтернативный синтаксис ИЛИ

Разбор:

  • && (И), || (ИЛИ), ! (НЕ) формируют булевы выражения.
  • and и or логически эквивалентны && и ||, но имеют другой приоритет.
  • Из-за приоритета and/or часто ведут к неожиданному результату в выражениях с присваиванием.
  • Рекомендация: для условий в коде использовать && и || как более предсказуемые.
  • Пример с true/false наглядно показывает результат каждой логической операции.

Операторы && и || имеют более высокий приоритет, чем and и or. Смешивание этих стилей в одном выражении может привести к неожиданному порядку вычислений.

Логические операции:

$<результат> = $<a> && $<b>;
$<результат> = $<a> || $<b>;
$<результат> = !$<a>;
$<результат> = $<a> and $<b>;
$<результат> = $<a> or $<b>;


Специальные операторы и символы

Доллар

Символ доллара $ предшествует имени каждой переменной в PHP. Он отличает переменные от ключевых слов и литералов.

$name = "Tom";
$age = 30;
$is_active = true;

Разбор:

  • Все имена переменных в PHP обязательно начинаются с $.
  • Имя после $ чувствительно к регистру: $age и $Age — разные переменные.
  • Тип значения определяется при присваивании (динамическая типизация).
  • Допустимы буквы, цифры и _, но имя не должно начинаться с цифры.
  • Такой префикс сразу визуально отличает переменные от функций и констант.

Константы и имена функций, классов, методов используются без символа доллара.

Пример - объявление переменной:

$<имя> = <значение>;

Присваивание с преобразованием типа:

$<имя> = (<тип>) <выражение>;


Стрелка

Двойная стрелка -> обращается к свойствам и методам объектов.

$user = new User();
$user->name = "Elena";
$user->save();
echo $user->getName();

Разбор:

  • new User() создаёт экземпляр класса и возвращает объект.
  • Оператор -> обращается к свойствам и методам конкретного объекта.
  • $user->name = "Elena" присваивает значение свойству экземпляра.
  • $user->save() и $user->getName() вызывают методы этого объекта.
  • Такой доступ работает только с объектами, а не со статическими членами класса.

Стрелка применяется только к экземплярам классов. Для статических членов класса используется двойное двоеточие ::.

Обращение к свойству объекта:

$<объект>-><свойство>

Вызов метода объекта:

$<объект>-><метод>(<аргументы>);


Двойное двоеточие

Двойное двоеточие :: обращается к статическим свойствам, методам и константам класса.

class Config {
const MAX_SIZE = 1024;
public static $timeout = 30;
public static function getDefault() {
return self::MAX_SIZE;
}
}

echo Config::MAX_SIZE; // 1024
echo Config::$timeout; // 30
echo Config::getDefault(); // 1024

Разбор:

  • :: обращается к статическим членам класса без создания объекта.
  • const MAX_SIZE задаёт константу класса, доступную как Config::MAX_SIZE.
  • public static $timeout хранит общее для класса состояние.
  • Статический метод getDefault() вызывается напрямую через имя класса.
  • Внутри класса self::MAX_SIZE ссылается на собственную константу этого класса.

Внутри класса для обращения к собственным статическим членам используются ключевые слова self, static или parent.

Обращение к статическому свойству:

<Класс>::$<свойство>

Вызов статического метода:

<Класс>::<метод>(<аргументы>);


Стрелка-функция

Стрелка-функция fn() определяет короткие анонимные функции с неявным возвратом.

$square = fn($x) => $x * $x;
echo $square(5); // 25

$users = ["alice", "bob", "charlie"];
$upper = array_map(fn($name) => strtoupper($name), $users);
// ["ALICE", "BOB", "CHARLIE"]

Разбор:

  • fn($x) => $x * $x задаёт короткую анонимную функцию с неявным return.
  • Полученная функция сохраняется в переменную и вызывается как обычный callable ($square(5)).
  • array_map(...) применяет функцию к каждому элементу массива.
  • Во втором примере strtoupper переводит имена в верхний регистр.
  • Стрелочные функции автоматически "захватывают" внешние переменные по значению.

Стрелочные функции автоматически захватывают переменные из окружающей области видимости без необходимости использования use.


Тернарный оператор

Тернарный оператор ? : выбирает значение на основе условия.

$<результат> = <условие> ? <значение_если_истина> : <значение_если_ложь>;

$age = 20;
$status = $age >= 18 ? "adult" : "minor";

// Сокращённая форма (оператор Элвиса)
$username = $_GET['user'] ?? "guest";

Разбор:

  • Тернарный оператор ?: возвращает одно из двух значений по условию.
  • В примере статус определяется по возрасту одной компактной строкой.
  • ?? (null coalescing) берёт левое значение, если оно существует и не null.
  • $_GET['user'] ?? "guest" безопасно задаёт значение по умолчанию для необязательного параметра.
  • Важно различать ?? и ?:: первый проверяет null, второй — любую "ложность".

Оператор Элвиса ?: возвращает левый операнд, если он приводится к истине, иначе правый операнд. Оператор нулевого слияния ?? возвращает левый операнд, если он не равен null, иначе правый операнд.

Оператор нулевого слияния:

$<результат> = $<переменная> ?? <значение_по_умолчанию>;

Оператор Элвиса:

$<результат> = $<переменная> ?: <значение_по_умолчанию>;


Match-выражение

Конструкция match сопоставляет значение с несколькими вариантами и возвращает результат.

$statusCode = 404;
$message = match($statusCode) {
200, 201 => "Success",
400 => "Bad request",
404 => "Not found",
500 => "Server error",
default => "Unknown status"
};

Разбор:

  • match сравнивает значение строго (===) с каждым вариантом.
  • Каждая ветка возвращает результат через =>, который присваивается в $message.
  • Можно группировать несколько вариантов в одной ветке (200, 201 => ...).
  • default обязателен, если не покрыты все возможные значения.
  • В отличие от switch, match не требует break и сам является выражением.

Match возвращает значение, которое можно присвоить переменной или использовать в выражении. Все ветви должны возвращать совместимые типы.

Match-выражение:

$<результат> = match(<выражение>) {
<значение1>, <значение2> => <результат1>,
<значение3> => <результат2>,
default => <результат_по_умолчанию>
};

Условный оператор (if)

if (<условие>) {
// действия при истине
} elseif (<условие>) {
// действия при втором условии
} else {
// действия при лжи
}

Разбор:

  • if проверяет первое условие и выполняет блок только при истинном результате.
  • elseif добавляет альтернативные проверки, если предыдущие не сработали.
  • else выполняется как ветка по умолчанию, когда все условия ложны.
  • Скобки после if/elseif обязательны, а тело ветки оформляется в { ... }.
  • Это базовая конструкция управления потоком выполнения программы.

Приоритет операторов

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

$result = 2 + 3 * 4; // 14, умножение выполняется раньше сложения
$result = (2 + 3) * 4; // 20, скобки изменяют порядок

Разбор:

  • Без скобок срабатывает стандартный приоритет: * выше +, поэтому результат 14.
  • Скобки принудительно меняют порядок вычисления, и выражение даёт 20.
  • Один и тот же набор операторов может дать разный итог из-за приоритета.
  • Явные скобки делают код предсказуемым и облегчают чтение другим разработчикам.
  • Это особенно важно в длинных булевых и арифметических выражениях.

При одинаковом приоритете операторы вычисляются согласно ассоциативности: слева направо или справа налево. Например, оператор присваивания ассоциативен справа налево, а арифметические операторы — слева направо.

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


Частые ошибки новичков

ОшибкаЧто происходитКак писать надёжнее
if ($a = 1) вместо if ($a == 1)Присваивание внутри условия, логика ломаетсяВ условиях используйте сравнение и строгие операторы
and вместе с =Из-за приоритета результат отличается от ожидаемогоДля булевой логики в выражениях используйте && и `
Слепое использование ==Автоприведение типов даёт ложные совпаденияДля бизнес-логики предпочитайте === и !==
Интерполяция сложных выражений без {}Непредсказуемая подстановка в строкахСложные выражения всегда пишите как {$expr}
Непонимание разницы ?: и ??Теряются значения 0, "", false?? — для null, ?: — для falsey-значений

Мини-чеклист перед запуском кода

  • Все инструкции закрыты ;, кроме синтаксических блоков.
  • Строки с переменными в шаблонах проверены на корректные " и экранирование.
  • Сравнения в условиях выполнены через ===, если нет явной причины для ==.
  • В выражениях с несколькими операторами есть скобки для явного приоритета.
  • Комментарии описывают "почему", а не повторяют строку кода.

Связанные статьи