Карта знаний PHP — gemma4:e2b: 5 прогонов

тепловая карта: клетка = доля верных ответов по прогонам (0% красная → 100% зелёная, число внутри — % верных); пунктир — нестабильная клетка (флип: ответы прогонов не совпали); протокол клетки как в одиночной карте.

Прогонов: 5
Средняя точность: 70.4% (разброс 166–171 из 240)
Семейства: PHP 79.6% · PHP+версии 70.0% · Symfony 66.9% · Symfony+версии 62.5% · БД и ORM 75.8% · Архитектура 60.0% · Фронтенд 70.0% · HTTP 100.0% · Безопасность 90.0% · Тесты 75.0% · Глубина 36.8% · Всего 70.2%
Токены по всем прогонам: 211295 вх / 73757 вых
Флипующих клеток: 33 / 240
Разобрано JSON: 99.1% (не-JSON: 13 из 1480)
Стабильность = доля клеток, где все прогоны ответили одинаково; флип (ответы расходятся) — знание под вопросом

Тепловая карта

0% верных 50% 100% флип (ответы прогонов расходятся)
L1
L2
L3
L4
L5
L6
L7
L8
L9
L10
итог
Синтаксис и операторы
100
T01-L1 · Синтаксис и операторы
Строки в двойных и одинарных кавычках обрабатываются одинаково, разница только в скорости.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T01-L2 · Синтаксис и операторы
Оператор ?? работает по семантике isset и не порождает предупреждений для неопределённых переменных.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T01-L3 · Синтаксис и операторы
Что выведет: echo 'a', 'b';
Верный ответ: ab
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T01-L4 · Синтаксис и операторы
print возвращает значение 1 и может использоваться внутри выражения.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T01-L5 · Синтаксис и операторы
Оператор ?: (элвис) возвращает левый операнд, если он ложный.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
80
T01-L6 · Синтаксис и операторы
В PHP 8 приоритет оператора конкатенации (.) ниже, чем у сложения и вычитания.
Верный ответ: да
run-01: ⬜ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T01-L7 · Синтаксис и операторы
Выражение 2 ** 3 ** 2 в PHP вычисляется как (2 ** 3) ** 2, то есть 64.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T01-L8 · Синтаксис и операторы
Какую строку выведет: echo 'сумма: ' . 2 + 3; (PHP 8)?
Верный ответ: сумма: 5
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T01-L9 · Синтаксис и операторы
Что выведет этот код? ```php echo intdiv(7, 2) . intdiv(-7, 2); ```
Верный ответ: 3-3
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T01-L10 · Синтаксис и операторы
Что выведет этот код? ```php echo -3 ** 2; ```
Верный ответ: -9
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
58.0%
Типы и сравнения
100
T02-L1 · Типы и сравнения
Массивы при строгом сравнении === считаются равными независимо от порядка элементов.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
40
T02-L2 · Типы и сравнения
Сравнение 0 == false возвращает false, потому что это строгое сравнение.
Верный ответ: нет
run-01: ✓ · run-02: ✗ · run-03: ✗ · run-04: ✓ · run-05: ✗
100
T02-L3 · Типы и сравнения
В PHP 8 выражение "abc" == 0 возвращает true.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T02-L4 · Типы и сравнения
Значение null при нестрогом сравнении равно одновременно 0, пустой строке и false.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T02-L5 · Типы и сравнения
Что вернёт выражение: (int) '42abc'?
Верный ответ: 42
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T02-L6 · Типы и сравнения
Что вернёт выражение: '5' + 5?
Верный ответ: 10
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T02-L7 · Типы и сравнения
При приведении к строке значение false превращается в "0".
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T02-L8 · Типы и сравнения
Сравнение 0.1 + 0.2 === 0.3 возвращает false.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T02-L9 · Типы и сравнения
Что выведет этот код? ```php echo '1e1' == '10' ? 'true' : 'false'; ```
Верный ответ: true
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T02-L10 · Типы и сравнения
Что выведет этот код? ```php switch ('a') { case 0: echo 'zero'; break; default: echo 'other'; } ```
Верный ответ: other
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
84.0%
Строки
100
T03-L1 · Строки
strrev() корректно переворачивает строку в UTF-8.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T03-L2 · Строки
str_contains('Hello world', 'world') возвращает true.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T03-L3 · Строки
str_pad() умеет дополнять строку только справа.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T03-L4 · Строки
По умолчанию trim() срезает только пробелы, не трогая табы и переводы строк.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T03-L5 · Строки
Сколько БАЙТ вернёт strlen('привет') для строки в UTF-8?
Верный ответ: 12
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T03-L6 · Строки
Что вернёт substr('abcdef', -3)?
Верный ответ: def
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T03-L7 · Строки
ucfirst() изменяет строку, переданную ей, на месте.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T03-L8 · Строки
В heredoc работают интерполяция переменных, а в nowdoc — нет.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T03-L9 · Строки
Что выведет этот код? ```php echo strtr('abc', ['a' => '1', 'ab' => '2']); ```
Верный ответ: 2c
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
20
T03-L10 · Строки
Что выведет этот код? ```php echo '[' . substr('hello', -10) . ']'; ```
Верный ответ: [hello]
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✓ · run-05: ✗
62.0%
Массивы
100
T04-L1 · Массивы
Функция sort() сохраняет связь ключей и значений массива.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T04-L2 · Массивы
Строковый ключ '5' в массиве сохраняется как целое число 5.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T04-L3 · Массивы
Функция in_array() по умолчанию использует строгое сравнение (===).
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T04-L4 · Массивы
array_filter() без колбэка удаляет из массива все «пустые» (falsy) элементы.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T04-L5 · Массивы
Функция array_slice() по умолчанию сохраняет исходные числовые ключи массива.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T04-L6 · Массивы
Что вернёт array_slice([10, 20, 30, 40], 1, 2)?
Верный ответ: [20,30]
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T04-L7 · Массивы
Сколько элементов будет в count(['a' => 1] + ['a' => 9, 'b' => 2])?
Верный ответ: 2
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T04-L8 · Массивы
Spread-оператор [...$a, ...$b] с PHP 8.1 поддерживает массивы со строковыми ключами.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T04-L9 · Массивы
Что выведет этот код? ```php $a = ['k' => 1, 'n' => 2]; $b = ['k' => 9, 'm' => 3]; echo implode(',', array_keys($a + $b)); ```
Верный ответ: k,n,m
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T04-L10 · Массивы
Что выведет этот код? ```php $a = [[1, 'x', 2], [2, 'y', 1], [3, 'z', 2]]; usort($a, fn($p, $q) => $p[2] <=> $q[2]); echo implode('', array_column($a, 1)); ```
Верный ответ: yxz
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
80.0%
Функции и замыкания
100
T05-L1 · Функции и замыкания
Именованные аргументы нельзя комбинировать с распаковкой массива ...$args в одном вызове.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T05-L2 · Функции и замыкания
Анонимная функция без use видит переменные внешней области видимости.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T05-L3 · Функции и замыкания
Что вернёт func_num_args() внутри function f($a) { return func_num_args(); } при вызове f(1, 2, 3)?
Верный ответ: 3
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T05-L4 · Функции и замыкания
Тело стрелочной функции fn может состоять из нескольких выражений в фигурных скобках.
Верный ответ: нет
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T05-L5 · Функции и замыкания
Стрелочная функция fn захватывает внешние переменные по ссылке (лениво, при использовании).
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T05-L6 · Функции и замыкания
Замыкание, объявленное как static function () {}, не захватывает $this.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T05-L7 · Функции и замыкания
Что выведет: $x = 5; $f = function () use ($x) { return $x; }; $x = 7; echo $f();
Верный ответ: 5
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T05-L8 · Функции и замыкания
В «слабом» режиме типизации (без strict_types) передача строки "5" в параметр с типом int допустима.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T05-L9 · Функции и замыкания
Что выведет этот код? ```php class P { private int $v = 3; public function g(): int { return $this->v; } } $p = new P; $f = $p->g(...); $p = null; echo $f(); ```
Верный ответ: 3
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T05-L10 · Функции и замыкания
Что выведет этот код? ```php function f(int $a, int $b): int { return $a - $b; } echo f(...['b' => 1, 'a' => 5]); ```
Верный ответ: 4
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
60.0%
ООП: классы и наследование
100
T06-L1 · ООП: классы и наследование
PHP поддерживает promotion свойств в конструкторе: public function __construct(private int $x) {}.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T06-L2 · ООП: классы и наследование
Какое ключевое слово запрещает переопределять метод в подклассах?
Верный ответ: final
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T06-L3 · ООП: классы и наследование
Метод, объявленный как final, нельзя переопределить в подклассе.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T06-L4 · ООП: классы и наследование
Свойства родителя с видимостью private доступны в подклассе.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T06-L5 · ООП: классы и наследование
Что вернёт get_class(new class {})? Ответь частью имени до нулевого байта (без пути к файлу).
Верный ответ: class@anonymous
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T06-L6 · ООП: классы и наследование
private-метод родителя не входит в контракт наследования: потомок может объявить метод с тем же именем с любой видимостью.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T06-L7 · ООП: классы и наследование
Магический метод __get() вызывается только для несуществующих свойств.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
20
T06-L8 · ООП: классы и наследование
Что бросит повторное присваивание readonly-свойства — Exception или Error?
Верный ответ: error
run-01: ✗ · run-02: ✓ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T06-L9 · ООП: классы и наследование
Что выведет этот код? ```php class A { public function who(): string { return static::class; } } class B extends A {} echo (new B)->who(); ```
Верный ответ: b
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T06-L10 · ООП: классы и наследование
Что выведет этот код на PHP 8.5? ```php class C { public int $x = 0 { set { $this->x = $value * 2; } } } $c = new C; $c->x = 5; echo $c->x; ```
Верный ответ: 10
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
72.0%
Интерфейсы, трейты, enum
100
T07-L1 · Интерфейсы, трейты, enum
Интерфейс может объявлять константы.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T07-L2 · Интерфейсы, трейты, enum
Какой оператор проверяет, что объект реализует класс или интерфейс?
Верный ответ: instanceof
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T07-L3 · Интерфейсы, трейты, enum
Интерфейс может объявлять статические методы.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T07-L4 · Интерфейсы, трейты, enum
Оператор instanceof проверяет только наследование классов: интерфейсы он не учитывает.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T07-L5 · Интерфейсы, трейты, enum
Метод интерфейса может иметь реализацию по умолчанию, как метод трейта.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T07-L6 · Интерфейсы, трейты, enum
Абстрактный метод в абстрактном классе может иметь видимость protected.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T07-L7 · Интерфейсы, трейты, enum
Сколько элементов вернёт Foo::cases() для enum Foo { case A; case B; case C; }?
Верный ответ: 3
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T07-L8 · Интерфейсы, трейты, enum
Трейт может объявлять константы.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T07-L9 · Интерфейсы, трейты, enum
Что выведет этот код? ```php trait TA { public function f(): string { return 'A'; } } trait TB { public function f(): string { return 'B'; } } class TC { use TA, TB { TB::f insteadof TA; TA::f as g; } } echo (new TC)->f() . (new TC)->g(); ```
Верный ответ: ba
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T07-L10 · Интерфейсы, трейты, enum
Что выведет этот код? ```php trait Counter { public static int $n = 0; } class CX { use Counter; } class CY { use Counter; } CX::$n = 1; echo CY::$n; ```
Верный ответ: 0
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
70.0%
Исключения и ошибки
100
T08-L1 · Исключения и ошибки
Интерфейс Throwable — общий предок и для Exception, и для Error.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T08-L2 · Исключения и ошибки
Блок catch (Exception $e) перехватит и TypeError, потому что TypeError в итоге наследуется от Exception.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T08-L3 · Исключения и ошибки
Оператор @ подавляет и исключения тоже.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T08-L4 · Исключения и ошибки
Какой класс ошибки бросит intdiv(5, 0)?
Верный ответ: divisionbyzeroerror
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T08-L5 · Исключения и ошибки
Блок finally выполняется только если исключение было поймано блоком catch.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T08-L6 · Исключения и ошибки
Исключение, выброшенное внутри блока finally, никак не влияет на результат try-блока.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
80
T08-L7 · Исключения и ошибки
Что вернёт выражение: (bool) new Exception('x')?
Верный ответ: true
run-01: ✓ · run-02: ✓ · run-03: ✗ · run-04: ✓ · run-05: ✓
40
T08-L8 · Исключения и ошибки
Функции, зарегистрированные через register_shutdown_function(), выполняются при вызове exit.
Верный ответ: да
run-01: ✓ · run-02: ✗ · run-03: ✓ · run-04: ✗ · run-05: ✗
100
T08-L9 · Исключения и ошибки
Что выведет этот код? ```php try { try { throw new RuntimeException('first'); } finally { throw new LogicException('second'); } } catch (LogicException $e) { echo $e->getMessage(); } ```
Верный ответ: second
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T08-L10 · Исключения и ошибки
Что выведет этот код? ```php function f(): int { try { return 1; } finally { return 2; } } echo f(); ```
Верный ответ: 2
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
92.0%
Пространства имён и автозагрузка
100
T09-L1 · Пространства имён и автозагрузка
Директива use App\Service\Mailer; сама по себе подключает файл с классом.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T09-L2 · Пространства имён и автозагрузка
Что пишут после use, чтобы импортировать функцию (а не класс): слово function или const?
Верный ответ: function
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T09-L3 · Пространства имён и автозагрузка
В какой файл (путь от src/) PSR-4 «App\ → src/» положит класс App\Controller\Api\UserController?
Верный ответ: src/controller/api/usercontroller.php
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T09-L4 · Пространства имён и автозагрузка
Подключение vendor/autoload.php регистрирует обработчики через spl_autoload_register().
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T09-L5 · Пространства имён и автозагрузка
Магическая константа __NAMESPACE__ содержит имя текущего пространства имён.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T09-L6 · Пространства имён и автозагрузка
Относительное имя класса (без ведущего \) в new резолвится от глобального корня.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T09-L7 · Пространства имён и автозагрузка
При маппинге PSR-4 «App\ → src/» класс App\Model\User лежит в файле src/Model/User.php.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T09-L8 · Пространства имён и автозагрузка
Директиву use можно писать внутри тела функции — импорт будет действовать для этой функции.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T09-L9 · Пространства имён и автозагрузка
Что выведет этот код? ```php namespace N; use App\Foo as Baz; echo Baz::class . '|' . \Baz::class; ```
Верный ответ: app\foo|baz
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T09-L10 · Пространства имён и автозагрузка
Что выведет этот код? ```php namespace Ns; class Foo {} $c = 'Foo'; echo (class_exists($c) ? 'yes' : 'no') . (class_exists(__NAMESPACE__ . '\\' . $c) ? 'yes' : 'no'); ```
Верный ответ: noyes
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
70.0%
Ссылки и область видимости
100
T10-L1 · Ссылки и область видимости
Массивы при присваивании копируются, а не передаются по ссылке.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T10-L2 · Ссылки и область видимости
Что выведет: $a = [1, 2]; $b = $a; $b[] = 3; echo count($a);
Верный ответ: 2
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T10-L3 · Ссылки и область видимости
Внутри функции пользовательские переменные глобальной области недоступны без global, $GLOBALS или передачи параметром.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T10-L4 · Ссылки и область видимости
unset($GLOBALS['x']) внутри функции удаляет глобальную переменную только для этой функции.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T10-L5 · Ссылки и область видимости
Что выведет: function inc(&$x) { $x++; } $n = 5; inc($n); echo $n;
Верный ответ: 6
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T10-L6 · Ссылки и область видимости
Foreach по массиву (по значению) работает с «живым» массивом: изменения массива внутри цикла видны в этом же проходе.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T10-L7 · Ссылки и область видимости
Статическое свойство класса у каждого экземпляра своё: изменения в одном объекте не видны в других.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T10-L8 · Ссылки и область видимости
Массив может иметь булев ключ true, и он сохранится как bool.
Верный ответ: нет
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T10-L9 · Ссылки и область видимости
Что выведет этот код? ```php $a = [1, 2, 3]; foreach ($a as &$v) {} $v = 99; echo implode(',', $a); ```
Верный ответ: 1,2,99
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T10-L10 · Ссылки и область видимости
Что выведет этот код? ```php class A { public function inc(): int { static $n = 0; return ++$n; } } class B extends A {} $a = new A; $b = new B; $a->inc(); $b->inc(); echo $a->inc(); ```
Верный ответ: 3
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
70.0%
Генераторы, итераторы, SPL
0
T11-L1 · Генераторы, итераторы, SPL
Внутри генератора можно использовать return со значением, и оно попадёт в $gen->getReturn().
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
80
T11-L2 · Генераторы, итераторы, SPL
Полностью пройденный генератор можно «перемотать» через rewind() и пройти снова.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✗
100
T11-L3 · Генераторы, итераторы, SPL
Конструкция yield from делегирует проход другому генератору или итерируемому объекту.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T11-L4 · Генераторы, итераторы, SPL
Что вернёт get_class(g()) для function g() { yield 1; }?
Верный ответ: generator
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T11-L5 · Генераторы, итераторы, SPL
Сколько элементов вернёт count(iterator_to_array((function () { yield from [1, 2, 3]; })()));
Верный ответ: 3
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T11-L6 · Генераторы, итераторы, SPL
Класс SplStack реализует очередь FIFO.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T11-L7 · Генераторы, итераторы, SPL
ArrayIterator позволяет обернуть массив и обходить его через интерфейс Iterator.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T11-L8 · Генераторы, итераторы, SPL
Объект класса ArrayObject нельзя обойти через foreach.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T11-L9 · Генераторы, итераторы, SPL
Что выведет этот код? ```php function g(): Generator { $x = yield 1; return $x + 1; } $g = g(); $g->send(10); echo $g->getReturn(); ```
Верный ответ: 11
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T11-L10 · Генераторы, итераторы, SPL
Что выведет этот код? ```php function inner(): Generator { yield 1; yield 2; return 'ok'; } function outer(): Generator { $r = yield from inner(); yield $r; } echo implode(',', iterator_to_array(outer())); ```
Верный ответ: ok,2
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
68.0%
Конфигурация и безопасность
100
T12-L1 · Конфигурация и безопасность
password_hash() генерирует соль автоматически — передавать её отдельно не нужно.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T12-L2 · Конфигурация и безопасность
Алгоритм PASSWORD_DEFAULT в PHP 8 — это md5 с автоматически добавленной солью.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T12-L3 · Конфигурация и безопасность
Что вернёт password_verify('secret', password_hash('secret', PASSWORD_DEFAULT))?
Верный ответ: true
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T12-L4 · Конфигурация и безопасность
Функция strip_tags() защищает от SQL-инъекций.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T12-L5 · Конфигурация и безопасность
Функция session_regenerate_id() используется для защиты от фиксации сессии при входе пользователя.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T12-L6 · Конфигурация и безопасность
Какая встроенная функция возвращает имя SAPI (например, cli)?
Верный ответ: php_sapi_name
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T12-L7 · Конфигурация и безопасность
session_destroy() удаляет данные сессии на сервере, но не cookie в браузере пользователя.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T12-L8 · Конфигурация и безопасность
Без вызова session_start() массив $_SESSION автоматически загружается данными сессии.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T12-L9 · Конфигурация и безопасность
Что выведет этот код? ```php $hash = password_hash('x', PASSWORD_BCRYPT, ['cost' => 4]); echo password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 4]) ? 'yes' : 'no'; echo password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 5]) ? 'yes' : 'no'; ```
Верный ответ: noyes
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
80
T12-L10 · Конфигурация и безопасность
Что выведет этот код на PHP 8.5? ```php echo (E_ALL & 2048) === 0 ? 'strict-out' : 'strict-in'; ```
Верный ответ: strict-out
run-01: ✓ · run-02: ✗ · run-03: ✓ · run-04: ✓ · run-05: ✓
68.0%
PHP 8.4–8.5
0
VC-L1 · PHP 8.4–8.5
В какой версии PHP появилась функция array_find()?
Верный ответ: 8.4
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
VC-L2 · PHP 8.4–8.5
Property hooks (get/set прямо в объявлении свойства) вошли в PHP 8.4.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
VC-L3 · PHP 8.4–8.5
Асимметричная видимость (public private(set) string $name) появилась в PHP 8.4.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
VC-L4 · PHP 8.4–8.5
В какой версии PHP впервые появился атрибут #[\NoDiscard]? Ответь номером версии.
Верный ответ: 8.5
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
VC-L5 · PHP 8.4–8.5
В какой версии PHP впервые появился оператор конвейера |> (pipe)? Ответь номером версии.
Верный ответ: 8.5
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
VC-L6 · PHP 8.4–8.5
В какой версии PHP появился clone-with — синтаксис clone($obj, ['x' => 1])? Ответь номером версии.
Верный ответ: 8.5
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
VC-L7 · PHP 8.4–8.5
В какой версии PHP появились функции array_first() и array_last()?
Верный ответ: 8.5
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
VC-L8 · PHP 8.4–8.5
Для какой версии PHP был принят RFC Partial Function Application v2 (по состоянию на 07.11.2026)? Ответь номером версии.
Верный ответ: 8.6
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
VC-L9 · PHP 8.4–8.5
Что выведет этот код на PHP 8.5? ```php class C { public function hi(): string { return 'hi'; } } echo new C()->hi(); ```
Верный ответ: hi
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
VC-L10 · PHP 8.4–8.5
Что выведет этот код на PHP 8.5? ```php class Heavy { public int $v = 0; } $r = new ReflectionClass(Heavy::class); $o = $r->newLazyGhost(function (Heavy $obj) { $obj->v = 21; }); echo $r->isUninitializedLazyObject($o) ? 'yes' : 'no'; $o->v; echo $r->isUninitializedLazyObject($o) ? 'yes' : 'no'; ```
Верный ответ: yesno
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
10.0%
PHP: 8.6+ и будущее
0
VF-L1 · PHP: 8.6+ и будущее
Для какой версии PHP реализован RFC clamp_v2 (функция clamp()) по состоянию на 07.11.2026? Ответь номером версии.
Верный ответ: 8.6
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
VF-L2 · PHP: 8.6+ и будущее
RFC Context Managers v2 уже принят в PHP (на 07.11.2026).
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
VF-L3 · PHP: 8.6+ и будущее
RFC Bound-Erased Generic Types (generics) был отклонён в 2026 году.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
VF-L4 · PHP: 8.6+ и будущее
На 07.11.2026 RFC о включении многопоточности (ZTS) по умолчанию уже принят в PHP.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
VF-L5 · PHP: 8.6+ и будущее
В PHP 8.5 дженериков (параметризованных типов) по-прежнему нет.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
VF-L6 · PHP: 8.6+ и будущее
На 07.11.2026 последняя стабильная версия PHP — 8.5, а PHP 8.6 ещё не выпущена (GA — 19.11.2026).
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
VF-L7 · PHP: 8.6+ и будущее
Ветка PHP 6 так и не вышла: после PHP 5.6 вышел сразу PHP 7.0.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
VF-L8 · PHP: 8.6+ и будущее
RFC о добавлении атрибута #[\Deprecated] в ядро был принят.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
25.0%
Чистая архитектура
100
T25-L1 · Чистая архитектура
Правило зависимостей в чистой и луковичной архитектурах: внутренние слои не знают о внешних — зависимости направлены к центру.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T25-L2 · Чистая архитектура
Сущности домена не импортируют ни Doctrine, ни Symfony — только язык и, возможно, стандартную библиотеку.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T25-L3 · Чистая архитектура
Контроллеры и Twig-шаблоны относятся к слою бизнес-логики, потому что именно они вызывают use cases.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T25-L4 · Чистая архитектура
Что находится в самом центре луковичной архитектуры?
Верный ответ: доменная модель
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T25-L5 · Чистая архитектура
Нарушение границ слоёв можно поймать автоматикой: анализатор зависимостей между слоями (например, deptrac) падает на запрещённом вызове.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
80
T25-L6 · Чистая архитектура
Use case (interactor) может принимать HTTP-запрос или EntityManager как аргументы — так проще.
Верный ответ: нет
run-01: ✗ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
80
T25-L7 · Чистая архитектура
Как называется компонент, предоставляющий коллекцию агрегатов/сущностей, скрывая механизм хранения за интерфейсом?
Верный ответ: репозиторий
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✗
0
T25-L8 · Чистая архитектура
Замена PostgreSQL на другую БД в чистой архитектуре затрагивает только внешний слой — домен и use cases не меняются.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
20
T25-L9 · Чистая архитектура
Слои: Domain, Application, Infrastructure. Правила deptrac: Application → Domain; Infrastructure → Domain, Application; Domain → только Domain. Сколько нарушений (Violations) покажет deptrac для этого класса? ```php namespace App\Domain; use App\Application\PlaceOrder; use App\Infrastructure\Db; class OrderService { public function __construct( private PlaceOrder $handler, private Db $db, ) {} } ```
Верный ответ: 2
run-01: ✗ · run-02: ✗ · run-03: ✓ · run-04: ✗ · run-05: ✗
0
T25-L10 · Чистая архитектура
Слои: Domain, Application, Infrastructure. Правила deptrac: Application → Domain; Infrastructure → Domain, Application; Domain → только Domain. Сколько нарушений (Violations) покажет deptrac для этого класса? ```php namespace App\Domain; use App\Application\PlaceOrder; use App\Infrastructure\Db; class BillingService { public function __construct( private PlaceOrder $handler, private Db $db, private \App\Infrastructure\Logger $logger, ) {} } ```
Верный ответ: 3
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
48.0%
DDD
100
T26-L1 · DDD
Агрегат в DDD — это просто другое название таблицы базы данных.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T26-L2 · DDD
Value Object неизменяем и сравнивается по значениям полей, а не по идентификатору.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T26-L3 · DDD
Как называется единственная точка внешнего входа в агрегат, через которую проходят все изменения?
Верный ответ: aggregate root
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T26-L4 · DDD
В DDD репозиторий объявляется на агрегат (его корень), а не на каждую сущность.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T26-L5 · DDD
Ubiquitous language — единый язык модели, общий для разработчиков и предметных экспертов.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T26-L6 · DDD
Как называется граница, внутри которой модель и её язык едины, а снаружи те же понятия — другие модели?
Верный ответ: bounded context
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T26-L7 · DDD
Анемичная модель (объекты только с геттерами/сеттерами, логика в сервисах) — рекомендуемый стиль DDD.
Верный ответ: нет
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T26-L8 · DDD
Bounded context означает, что у каждого контекста своя модель: одно и то же понятие в разных контекстах — разные классы.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T26-L9 · DDD
Что выведет этот код? ```php final class Order { private array $items = []; public function add(string $sku): void { $this->items[$sku] = true; } public function count(): int { return count($this->items); } public function remove(string $sku): void { if (count($this->items) === 1) { throw new DomainException('last item'); } unset($this->items[$sku]); } } $o = new Order; $o->add('a'); try { $o->remove('a'); } catch (DomainException) { } echo $o->count(); ```
Верный ответ: 1
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T26-L10 · DDD
Что выведет этот код? ```php final class Money { public function __construct(public readonly int $amount) {} public function add(Money $o): Money { return new self($this->amount + $o->amount); } } $a = new Money(10); $c = $a->add(new Money(5)); echo $a->amount . ',' . $c->amount; ```
Верный ответ: 10,15
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
50.0%
Symfony
100
T13-L1 · Symfony
Сервисы в DI-контейнере Symfony по умолчанию создаются лениво — при первом обращении к ним.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T13-L2 · Symfony
Какая консольная команда Symfony выводит список всех зарегистрированных маршрутов?
Верный ответ: debug:router
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T13-L3 · Symfony
Autowiring в Symfony требует вручную перечислять каждый сервис в конфигурации services.yaml.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T13-L4 · Symfony
Twig-шаблоны компилируются в PHP-классы и кэшируются между запросами.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T13-L5 · Symfony
Контейнер DI в dev-окружении Symfony пересобирается только после изменения отслеживаемых файлов, а не при каждом запросе.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T13-L6 · Symfony
Какая переменная окружения выбирает активное окружение Symfony (dev/prod)?
Верный ответ: app_env
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T13-L7 · Symfony
Метод контроллера может быть private — маршрутизация Symfony работает с любыми методами класса.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T13-L8 · Symfony
Подписчики событий (EventSubscriber) всегда получают события раньше слушателей (listeners), потому что интерфейс даёт им приоритет.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T13-L9 · Symfony
Что выведет этот код? ```php use Symfony\Component\HttpFoundation\Request; $r = Request::create('/demo', 'GET', [], [], [], ['HTTP_X_TOKEN' => 'abc']); echo $r->headers->get('X-Token') === 'abc' ? 'mapped' : 'missing'; ```
Верный ответ: mapped
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T13-L10 · Symfony
Что выведет этот код? ```php use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Contracts\EventDispatcher\Event; $d = new EventDispatcher(); $out = ''; $d->addListener('e', function () use (&$out) { $out .= 'B'; }, 10); $d->addListener('e', function () use (&$out) { $out .= 'A'; }); $d->addListener('e', function () use (&$out) { $out .= 'C'; }, 5); $d->dispatch(new Event(), 'e'); echo $out; ```
Верный ответ: bca
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
80.0%
Symfony: Security и формы
100
T22-L1 · Symfony: Security и формы
В современном Symfony (6.0+) аутентификация строится на классах-authenticator (AuthenticatorInterface); прежняя система guard удалена.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T22-L2 · Symfony: Security и формы
Какой атрибут Symfony проверяет роль/право прямо на методе контроллера (без него — 403)?
Верный ответ: isgranted
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T22-L3 · Symfony: Security и формы
Voters (голосующие) — механизм Symfony для проверки доступа к конкретному объекту: isGranted('EDIT', $post).
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T22-L4 · Symfony: Security и формы
Ограничения валидации в современных Symfony (7+) объявляются PHP-атрибутами (#[Assert\NotBlank]); аннотации-докблоки больше не поддерживаются.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T22-L5 · Symfony: Security и формы
CSRF-защита форм в Symfony включена по умолчанию: форма проверяет токен при отправке.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T22-L6 · Symfony: Security и формы
Валидация формы в Symfony выполняется на сервере, даже если клиентская (HTML5) проверка прошла.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
20
T22-L7 · Symfony: Security и формы
Какая команда Symfony maker генерирует класс формы (FormType)?
Верный ответ: make:form
run-01: ✗ · run-02: ✓ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T22-L8 · Symfony: Security и формы
Symfony хранит пароль пользователя в сессии в открытом виде (plaintext).
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T22-L9 · Symfony: Security и формы
Что выведет этот код? ```php use Symfony\Component\Validator\Validation; use Symfony\Component\Validator\Constraints as Assert; $v = Validation::createValidator(); echo count($v->validate([''], [new Assert\NotBlank()])); ```
Верный ответ: 0
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T22-L10 · Symfony: Security и формы
Что выведет этот код? ```php use Symfony\Component\Form\Forms; use Symfony\Component\Form\Extension\Core\Type\TextType; $factory = Forms::createFormFactoryBuilder()->getFormFactory(); $form = $factory->create(TextType::class); try { echo $form->isValid() ? 'valid' : 'invalid'; } catch (Throwable $e) { echo get_class($e); } ```
Верный ответ: symfony\component\form\exception\logicexception
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
62.0%
Symfony: конфигурация и сервисы
0
T23-L1 · Symfony: конфигурация и сервисы
Конфигурация бандлов Symfony лежит в config/packages — по одному файлу на бандл или тему.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T23-L2 · Symfony: конфигурация и сервисы
Файл .env с dev-дефолтами коммитится в репозиторий, а настоящие секреты живут в некоммитимом .env.local.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T23-L3 · Symfony: конфигурация и сервисы
Какая команда Symfony выводит зарегистрированные сервисы контейнера и их алиасы?
Верный ответ: debug:container
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T23-L4 · Symfony: конфигурация и сервисы
Контейнер Symfony позволяет менять параметры в рантайме: $container->setParameter() работает из контроллера.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T23-L5 · Symfony: конфигурация и сервисы
По умолчанию сервисы в Symfony публичны (public: true) — их достают из контейнера напрямую.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T23-L6 · Symfony: конфигурация и сервисы
Без конфигурационного файла в config/packages бандл не заработает — настройки обязательны для каждого бандла.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
60
T23-L7 · Symfony: конфигурация и сервисы
Значения переменных окружения подставляются в services.yaml синтаксисом %env(VAR)%.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✗ · run-05: ✗
0
T23-L8 · Symfony: конфигурация и сервисы
Какая переменная окружения Symfony включает режим отладки (влияет на профайлер и отладку Twig)?
Верный ответ: app_debug
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T23-L9 · Symfony: конфигурация и сервисы
Что выведет этот код? ```php use Symfony\Component\DependencyInjection\ContainerBuilder; $c = new ContainerBuilder(); $c->register('a', stdClass::class)->setPublic(true); $c->compile(); echo spl_object_id($c->get('a')) === spl_object_id($c->get('a')) ? 'same' : 'diff'; ```
Верный ответ: same
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T23-L10 · Symfony: конфигурация и сервисы
Что выведет этот код? ```php use Symfony\Component\DependencyInjection\ContainerBuilder; $c = new ContainerBuilder(); $c->setParameter('name', 'Bob'); $c->setParameter('greeting', 'hi %name%'); $c->setParameter('message', '%greeting%!'); $c->compile(); echo $c->getParameter('message'); ```
Верный ответ: hi bob!
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
66.0%
Symfony: Messenger
0
T16-L1 · Symfony: Messenger
Одно сообщение в Symfony Messenger может обрабатывать только один обработчик (handler).
Верный ответ: нет
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T16-L2 · Symfony: Messenger
Транспорт sync в Messenger ставит сообщение в очередь и обрабатывает его воркером, как и async.
Верный ответ: нет
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
40
T16-L3 · Symfony: Messenger
Какой консольной командой запускается воркер, обрабатывающий сообщения из очередей Messenger?
Верный ответ: messenger:consume
run-01: ✗ · run-02: ✗ · run-03: ✓ · run-04: ✗ · run-05: ✓
0
T16-L4 · Symfony: Messenger
Повторы неудачных сообщений (retry_strategy) настраиваются на уровне транспорта Messenger.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
40
T16-L5 · Symfony: Messenger
По умолчанию Messenger сериализует сообщения в JSON.
Верный ответ: нет
run-01: ✓ · run-02: ✗ · run-03: ✓ · run-04: ✗ · run-05: ✗
100
T16-L6 · Symfony: Messenger
Symfony Scheduler по расписанию порождает сообщения и отправляет их через Messenger.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
80
T16-L7 · Symfony: Messenger
Какой встроенный транспорт Messenger хранит сообщения в таблицах БД через Doctrine?
Верный ответ: doctrine
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✗ · run-05: ✓
100
T16-L8 · Symfony: Messenger
Пайплайн Messenger можно расширять собственными middleware, встраивая их до или после встроенных.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
80
T16-L9 · Symfony: Messenger
Что выведет этот код? ```php use Symfony\Component\Messenger\MessageBus; use Symfony\Component\Messenger\Middleware\MiddlewareInterface; use Symfony\Component\Messenger\Middleware\StackInterface; use Symfony\Component\Messenger\Envelope; final class Trace implements MiddlewareInterface { public function __construct(private string $tag) {} public function handle(Envelope $e, StackInterface $stack): Envelope { echo $this->tag; return $stack->next()->handle($e, $stack); } } $bus = new MessageBus([new Trace('M1'), new Trace('M2')]); $bus->dispatch(new Envelope(new stdClass())); ```
Верный ответ: m1m2
run-01: ✗ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T16-L10 · Symfony: Messenger
Что выведет этот код? ```php use Symfony\Component\Messenger\MessageBus; use Symfony\Component\Messenger\Middleware\HandleMessageMiddleware; use Symfony\Component\Messenger\Handler\HandlersLocator; use Symfony\Component\Messenger\Handler\HandlerDescriptor; use Symfony\Component\Messenger\Envelope; class Ping {} $n = 0; $d1 = new HandlerDescriptor(function (Ping $m) use (&$n) { $n += 1; }, ['alias' => 'h1']); $d2 = new HandlerDescriptor(function (Ping $m) use (&$n) { $n += 10; }, ['alias' => 'h2']); $bus = new MessageBus([ new HandleMessageMiddleware(new HandlersLocator([Ping::class => [$d1, $d2]])), ]); $bus->dispatch(new Envelope(new Ping())); echo $n; ```
Верный ответ: 11
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
44.0%
Symfony: версии
0
T28-L1 · Symfony: версии
Мажорные релизы Symfony выходят раз в два года, минорные — каждые шесть месяцев (в мае и ноябре).
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T28-L2 · Symfony: версии
Какой минимальной версии PHP требует Symfony 8?
Верный ответ: 8.4
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T28-L3 · Symfony: версии
Symfony 7.0 сохранила поддержку аннотаций в докблоках (валидация, маршруты).
Верный ответ: нет
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T28-L4 · Symfony: версии
AssetMapper позволяет управлять CSS/JS без node и webpack — через importmap.php.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T28-L5 · Symfony: версии
Symfony 6.4 — обычный релиз без длительной поддержки.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T28-L6 · Symfony: версии
При переходе на новую мажорную версию Symfony деприкейшены прошлой ветки продолжают работать — мажорные релизы их не удаляют.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T28-L7 · Symfony: версии
Каждый мажорный релиз Symfony сопровождается UPGRADE-гайдом со списком изменений.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
20
T28-L8 · Symfony: версии
Какой компонент Symfony управляет ассетами и importmap без node/webpack?
Верный ответ: asset-mapper
run-01: ✗ · run-02: ✗ · run-03: ✓ · run-04: ✗ · run-05: ✗
0
T28-L9 · Symfony: версии
Проект обновлён с Symfony 6.4 на 8.1. Что выведет этот код на 8.1? ```php echo class_exists(\Symfony\Component\Security\Guard\AbstractGuardAuthenticator::class) ? 'yes' : 'no'; ```
Верный ответ: no
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T28-L10 · Symfony: версии
Проект обновлён с Symfony 6.4 на 8.1. Что выведет этот код на 8.1? ```php echo class_exists(\Symfony\Component\Routing\Loader\AnnotationClassLoader::class) ? 'yes' : 'no'; echo class_exists(\Symfony\Component\Routing\Loader\AttributeClassLoader::class) ? 'yes' : 'no'; ```
Верный ответ: noyes
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
42.0%
Symfony: 8.2 и будущее
100
T29-L1 · Symfony: 8.2 и будущее
На 07.11.2026 Symfony 8.2 уже выпущена.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T29-L2 · Symfony: 8.2 и будущее
По состоянию на 07.11.2026 Symfony 8.2 запланирована на ноябрь 2026 — в обычном шестимесячном цикле.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T29-L3 · Symfony: 8.2 и будущее
Какая версия Symfony выйдет следующей после 8.1 (по состоянию на 07.11.2026)?
Верный ответ: 8.2
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T29-L4 · Symfony: 8.2 и будущее
Symfony 8.2 — мажорный релиз, требующий переписывания приложений под новые API.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T29-L5 · Symfony: 8.2 и будущее
Обновление внутри мажорной ветки (8.1 → 8.2) не должно требовать изменений кода — обратная совместимость сохраняется.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
40
T29-L6 · Symfony: 8.2 и будущее
Какая минорная версия ветки 8.x выйдет последней перед Symfony 9.0?
Верный ответ: 8.4
run-01: ✓ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✓
100
T29-L7 · Symfony: 8.2 и будущее
Symfony 8.2 потребует обновления PHP до 8.5 — придётся обновлять PHP вместе с ней.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T29-L8 · Symfony: 8.2 и будущее
Deprecations, добавленные в ветке 8.x, будут удалены не раньше Symfony 9.0.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
55.0%
Twig
100
T21-L1 · Twig
Внутри {{ }} в Twig можно вызывать произвольный PHP-код напрямую.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T21-L2 · Twig
Twig по умолчанию автоматически экранирует выводимые переменные.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T21-L3 · Twig
Фильтр |e в Twig экранирует строку для безопасного вывода в HTML-контексте.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T21-L4 · Twig
Какой фильтр из twig/intl-extra форматирует число с учётом локали?
Верный ответ: format_number
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T21-L5 · Twig
Фильтр |raw отключает автоэкранирование для значения.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T21-L6 · Twig
В Twig {{ }} выводит значение выражения, а {% %} выполняет теги — условия, циклы, set.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T21-L7 · Twig
В Twig нельзя объявить переменную в шаблоне — значения только передаются из контроллера.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
20
T21-L8 · Twig
Какая функция Twig выводит отладочную структуру переменной (массива, объекта)?
Верный ответ: dump
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✓ · run-05: ✗
100
T21-L9 · Twig
Что выведет этот шаблон Twig? ```twig {{ false|default(2) * 3 }} ```
Верный ответ: 6
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T21-L10 · Twig
Какой класс исключения выбросит render() этого шаблона? ```twig {{ 'a' ~ 1 + 2 }} ```
Верный ответ: runtimeerror
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
72.0%
Bootstrap
100
T24-L1 · Bootstrap
Bootstrap — это CSS/JS-библиотека готовых компонентов интерфейса, а не SPA-фреймворк.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T24-L2 · Bootstrap
Какой класс Bootstrap задаёт адаптивный контейнер с фиксированной максимальной шириной по брейкпоинтам?
Верный ответ: container
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T24-L3 · Bootstrap
Сетка Bootstrap построена на CSS float и делит строку на 16 колонок.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T24-L4 · Bootstrap
Именованные брейкпоинты Bootstrap (с инфиксом в классах) — sm, md, lg, xl, xxl; их пять.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T24-L5 · Bootstrap
Утилиты вроде .mt-3 или .px-2 используют шаг spacing-шкалы: число — множитель $spacer.
Верный ответ: нет
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T24-L6 · Bootstrap
Какой data-атрибут Bootstrap 5 включает интерактивный компонент (например, dropdown) на элементе?
Верный ответ: data-bs-toggle
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T24-L7 · Bootstrap
Компоненты Bootstrap 5 работают без jQuery — на чистом vanilla JS.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T24-L8 · Bootstrap
Тёмную тему в Bootstrap включают классом .dark на корневом элементе.
Верный ответ: нет
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T24-L9 · Bootstrap
Какая max-width у .container в Bootstrap 5.3 при ширине окна 992px?
Верный ответ: 960
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T24-L10 · Bootstrap
Какая утилита определит цвет текста в Bootstrap 5.3: `<p class="text-danger text-primary">…</p>`? Ответь именем класса-победителя.
Верный ответ: text-danger
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
60.0%
Doctrine
100
T14-L1 · Doctrine
Doctrine ORM сам создаёт таблицы в базе при первом обращении к сущности в рантайме.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T14-L2 · Doctrine
Какой метод EntityManager помечает новый объект как управляемый, не выполняя SQL до flush()?
Верный ответ: persist
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T14-L3 · Doctrine
В Doctrine ORM 3 метод EntityManager::merge() доступен и делает переданный объект управляемым.
Верный ответ: нет
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T14-L4 · Doctrine
DQL-запросы пишутся в терминах сущностей и их полей, а не таблиц и столбцов.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T14-L5 · Doctrine
Что вернёт $repository->find(999), если записи с идентификатором 999 нет?
Верный ответ: null
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T14-L6 · Doctrine
DoctrineBundle в Symfony автоматически вызывает flush() в конце каждого запроса.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T14-L7 · Doctrine
Для управляемой сущности достаточно изменить свойство: flush() зафиксирует изменение без вызова persist() — Unit of Work отслеживает изменения.
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T14-L8 · Doctrine
remove() выполняет SQL DELETE сразу, не дожидаясь flush().
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T14-L9 · Doctrine
Дано: Doctrine ORM 3, EntityManager на SQLite in-memory, entity User с автоинкрементным первичным ключом. Таблица users пуста. Что выведет этот код? ```php $u = new User(name: 'B'); $em->persist($u); $em->remove($u); $em->flush(); echo count($em->getConnection()->fetchAllAssociative('SELECT * FROM users')); ```
Верный ответ: 0
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T14-L10 · Doctrine
Дано: Doctrine ORM 3, EntityManager на SQLite in-memory, entity User с автоинкрементным первичным ключом. Таблица users пуста. Что выведет этот код? ```php $u = new User(name: 'A'); $em->persist($u); $em->flush(); $a = $em->find(User::class, $u->getId()); $b = $em->find(User::class, $u->getId()); echo spl_object_id($a) === spl_object_id($b) ? 'same' : 'diff'; ```
Верный ответ: same
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
80.0%
PostgreSQL
100
T15-L1 · PostgreSQL
PostgreSQL использует MVCC, поэтому читатели блокируют писателей, а писатели — читателей.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T15-L2 · PostgreSQL
Какая команда SQL показывает план выполнения запроса, не выполняя сам запрос?
Верный ответ: explain
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T15-L3 · PostgreSQL
SERIAL и GENERATED ... AS IDENTITY — это два названия одного и того же механизма.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T15-L4 · PostgreSQL
UNIQUE-ограничение PostgreSQL по умолчанию допускает только одну строку с NULL в столбце.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T15-L5 · PostgreSQL
Какая агрегатная функция PostgreSQL склеивает строки с разделителем?
Верный ответ: string_agg
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T15-L6 · PostgreSQL
Обычный VACUUM возвращает место, занятое «мёртвыми» кортежами, операционной системе.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T15-L7 · PostgreSQL
Какое ключевое слово в определении window-функции разбивает строки на группы, для которых считается функция?
Верный ответ: partition by
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T15-L8 · PostgreSQL
Уровень изоляции READ COMMITTED защищает от неповторяющегося чтения (non-repeatable read).
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T15-L9 · PostgreSQL
Что вернёт этот SQL-запрос (PostgreSQL 17)? ```sql CREATE TEMP TABLE t (id int, x int); INSERT INTO t VALUES (1, 10), (2, 20), (3, 30); SELECT string_agg(s::text, ',' ORDER BY id) FROM ( SELECT id, sum(x) OVER (ORDER BY id) AS s FROM t ) q; ```
Верный ответ: 10,30,60
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T15-L10 · PostgreSQL
Что вернёт этот SQL-запрос (PostgreSQL 17)? ```sql CREATE TEMP TABLE t (x int); INSERT INTO t VALUES (1), (NULL); SELECT count(x) FROM t; ```
Верный ответ: 1
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
70.0%
PostgreSQL: транзакции и индексы
0
T17-L1 · PostgreSQL: транзакции и индексы
По умолчанию PostgreSQL выполняет каждый отдельный SQL-оператор в собственной неявной транзакции (autocommit).
Верный ответ: да
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T17-L2 · PostgreSQL: транзакции и индексы
Какая SQL-команда завершает транзакцию, сохраняя все её изменения?
Верный ответ: commit
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T17-L3 · PostgreSQL: транзакции и индексы
Индексы ускоряют не только SELECT: UPDATE и DELETE с поиском по индексированному столбцу тоже выигрывают.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T17-L4 · PostgreSQL: транзакции и индексы
Для отката части операторов внутри транзакции PostgreSQL использует SAVEPOINT.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T17-L5 · PostgreSQL: транзакции и индексы
EXPLAIN ANALYZE показывает план запроса, не выполняя сам запрос.
Верный ответ: нет
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T17-L6 · PostgreSQL: транзакции и индексы
Какое расширение PostgreSQL добавляет векторные типы и индексы для поиска по эмбеддингам?
Верный ответ: vector
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T17-L7 · PostgreSQL: транзакции и индексы
Частичный индекс (CREATE INDEX ... WHERE ...) строится только по строкам, удовлетворяющим условию.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
20
T17-L8 · PostgreSQL: транзакции и индексы
Уровень SERIALIZABLE в PostgreSQL реализован блокировкой строк, которые читает транзакция.
Верный ответ: нет
run-01: ✓ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T17-L9 · PostgreSQL: транзакции и индексы
Что вернёт этот SQL-запрос (PostgreSQL 17)? ```sql CREATE TEMP TABLE t (a int); CREATE UNIQUE INDEX ON t (a); INSERT INTO t VALUES (1) ON CONFLICT DO NOTHING; INSERT INTO t VALUES (1) ON CONFLICT DO NOTHING; SELECT count(*) FROM t; ```
Верный ответ: 1
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
60
T17-L10 · PostgreSQL: транзакции и индексы
Что выведет эта последовательность команд psql? ```sql BEGIN; CREATE TEMP TABLE t (a int, UNIQUE (a) DEFERRABLE INITIALLY DEFERRED); INSERT INTO t VALUES (1); INSERT INTO t VALUES (1); SELECT count(*) FROM t; ```
Верный ответ: 2
run-01: ✓ · run-02: ✓ · run-03: ✗ · run-04: ✗ · run-05: ✓
68.0%
HTTP и REST API
100
T19-L1 · HTTP и REST API
HTTP-статус 201 означает, что в результате запроса создан новый ресурс.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T19-L2 · HTTP и REST API
Какой HTTP-статус означает успешный запрос с пустым телом ответа (например, после DELETE)?
Верный ответ: 204
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T19-L3 · HTTP и REST API
Метод DELETE идемпотентен по спецификации HTTP: повторный запрос по тому же ресурсу не меняет результат.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T19-L4 · HTTP и REST API
Заголовок Access-Control-Allow-Origin отправляет клиент, чтобы сервер разрешил принимать запросы с другого origin.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T19-L5 · HTTP и REST API
Код 429 Too Many Requests используется, когда клиент превысил лимит запросов (rate limiting).
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T19-L6 · HTTP и REST API
Коды 5xx означают ошибку клиента, а 4xx — ошибку на стороне сервера.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T19-L7 · HTTP и REST API
Какой HTTP-заголовок указывает MIME-тип тела запроса или ответа?
Верный ответ: content-type
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T19-L8 · HTTP и REST API
PATCH не обязан быть идемпотентным по RFC 5789, в отличие от PUT.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T19-L9 · HTTP и REST API
Какой HTTP-метод отправит эта команда? ```bash curl -s -d 'a=1' http://demo.local/api ```
Верный ответ: post
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T19-L10 · HTTP и REST API
Какой HTTP-метод отправит эта команда? ```bash curl -s -G -d 'a=1' http://demo.local/api ```
Верный ответ: get
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
90.0%
Безопасность и OAuth
100
T20-L1 · Безопасность и OAuth
Проверить пароль достаточно сравнением его хеша с хешем из базы обычным оператором ==.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T20-L2 · Безопасность и OAuth
CSRF-токен выдаётся сервером (привязан к сессии) и проверяется на сервере при unsafe-запросах (POST и т.п.).
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T20-L3 · Безопасность и OAuth
Какой HTTP-заголовок включает политику CSP (Content Security Policy)?
Верный ответ: content-security-policy
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T20-L4 · Безопасность и OAuth
OAuth 2.0 — протокол аутентификации: access-токен сообщает, кто именно пользователь.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T20-L5 · Безопасность и OAuth
XSS предотвращается валидацией ввода на сервере перед записью в базу.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
60
T20-L6 · Безопасность и OAuth
В authorization code flow OAuth 2.0 какой параметр приходит в redirect_uri и обменивается на access-токен?
Верный ответ: code
run-01: ✓ · run-02: ✗ · run-03: ✓ · run-04: ✗ · run-05: ✓
100
T20-L7 · Безопасность и OAuth
Refresh-токен живёт дольше access-токена и позволяет получить новый access-токен без повторного входа пользователя.
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
60
T20-L8 · Безопасность и OAuth
Соль пароля нужно держать в секрете: без неё хеш нельзя проверить.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✗ · run-05: ✗
0
T20-L9 · Безопасность и OAuth
Клиент обращается к токен-эндпоинту (RFC 6749) с несуществующим client_id. Какое значение поля error вернёт эндпоинт?
Верный ответ: invalid_client
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T20-L10 · Безопасность и OAuth
OAuth 2.0: клиент начал поток с response_type=token. В какой части redirect_uri авторизационный сервер передаёт access_token?
Верный ответ: fragment
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
72.0%
Тестирование: PHPUnit
100
T18-L1 · Тестирование: PHPUnit
PHPUnit выполняет тестовые методы любого класса — наследовать TestCase не обязательно.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T18-L2 · Тестирование: PHPUnit
Метод setUp() в PHPUnit вызывается один раз перед всеми тестами класса.
Верный ответ: нет
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
100
T18-L3 · Тестирование: PHPUnit
Поставщик данных (data provider) позволяет прогнать тест ровно с одним набором аргументов.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T18-L4 · Тестирование: PHPUnit
Какой метод PHPUnit объявляет ожидание исключения определённого класса?
Верный ответ: expectexception
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T18-L5 · Тестирование: PHPUnit
В PHPUnit стаб (stub) проверяет, какие методы на нём вызывали, а мок (mock) только подставляет данные.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T18-L6 · Тестирование: PHPUnit
В PHPUnit 10+ рекомендуемый способ передачи данных в тест — атрибут #[DataProvider] (аннотация @dataProvider устарела).
Верный ответ: да
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
100
T18-L7 · Тестирование: PHPUnit
В PHPUnit нельзя объявить зависимость одного теста от результата другого.
Верный ответ: нет
run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓
0
T18-L8 · Тестирование: PHPUnit
Какая опция командной строки PHPUnit включает случайный порядок выполнения тестов?
Верный ответ: --order-by=random
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T18-L9 · Тестирование: PHPUnit
Сколько тестов выполнит эта команда? ```php use PHPUnit\Framework\TestCase; use PHPUnit\Framework\Attributes\DataProvider; final class CalcTest extends TestCase { public static function prov(): array { return [[1], [2], [3]]; } #[DataProvider('prov')] public function test_sum(int $x): void { $this->assertTrue($x > 0); } #[DataProvider('prov')] public function test_sum_abs(int $x): void { $this->assertTrue($x > 0); } public function test_other(): void { $this->assertTrue(true); } } ``` Команда: `phpunit CalcTest.php --filter test_sum` (PHPUnit 10.5)
Верный ответ: 6
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
0
T18-L10 · Тестирование: PHPUnit
Сколько тестов выполнит эта команда и сколько из них завершится failure? Ответь двумя числами через запятую (выполнено, упало). ```php use PHPUnit\Framework\TestCase; use PHPUnit\Framework\Attributes\DataProvider; final class Calc2Test extends TestCase { public function prov(): array { return [[1], [-1]]; } #[DataProvider('prov')] public function test_x(int $x): void { $this->assertTrue($x > 0); } } ``` Команда: `phpunit Calc2Test.php` (PHPUnit 10.5)
Верный ответ: 2,1
run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗
60.0%

Прогоны: точность и стоимость

ПрогонthinkВерно% ВремяТокены (вх / вых / кэш)
run-01off171 / 24071.2%48.8 c42259 / 14526 / 0
run-02off169 / 24070.4%45.8 c42259 / 15042 / 0
run-03off171 / 24071.2%44.3 c42259 / 14552 / 0
run-04off166 / 24069.2%45.3 c42259 / 14929 / 0
run-05off166 / 24069.2%44.7 c42259 / 14708 / 0

Флипующие клетки

КлеткаУтверждениеrun-01run-02run-03run-04run-05
T02-L2Сравнение 0 == false возвращает false, потому что это строгое сравнение.нетдаданетда
T03-L5Сколько БАЙТ вернёт strlen('привет') для строки в UTF-8?дадададада
T06-L8Что бросит повторное присваивание readonly-свойства — Exception или Error?дадададада
T07-L2Какой оператор проверяет, что объект реализует класс или интерфейс?дадададада
T08-L7Что вернёт выражение: (bool) new Exception('x')?дадададада
T08-L8Функции, зарегистрированные через register_shutdown_function(), выполняются при вызове exit.данетданетнет
T11-L2Полностью пройденный генератор можно «перемотать» через rewind() и пройти снова.нетнетнетнетда
T12-L6Какая встроенная функция возвращает имя SAPI (например, cli)?дадададада
VC-L1В какой версии PHP появилась функция array_find()?дадададада
VC-L5В какой версии PHP впервые появился оператор конвейера |> (pipe)? Ответь номером версии.дадададада
VC-L6В какой версии PHP появился clone-with — синтаксис clone($obj, ['x' => 1])? Ответь номером версии.дадададада
VC-L7В какой версии PHP появились функции array_first() и array_last()?дадададада
VC-L8Для какой версии PHP был принят RFC Partial Function Application v2 (по состоянию на 07.11.2026)? Ответь номером версии.дадададада
VF-L1Для какой версии PHP реализован RFC clamp_v2 (функция clamp()) по состоянию на 07.11.2026? Ответь номером версии.дадададада
T25-L4Что находится в самом центре луковичной архитектуры?дадададада
T25-L6Use case (interactor) может принимать HTTP-запрос или EntityManager как аргументы — так проще.данетнетнетнет
T25-L7Как называется компонент, предоставляющий коллекцию агрегатов/сущностей, скрывая механизм хранения за интерфейсом?дадададада
T26-L6Как называется граница, внутри которой модель и её язык едины, а снаружи те же понятия — другие модели?дадададада
T22-L2Какой атрибут Symfony проверяет роль/право прямо на методе контроллера (без него — 403)?дадададада
T22-L7Какая команда Symfony maker генерирует класс формы (FormType)?дадададада
T23-L3Какая команда Symfony выводит зарегистрированные сервисы контейнера и их алиасы?дадададада
T23-L7Значения переменных окружения подставляются в services.yaml синтаксисом %env(VAR)%.дададанетнет
T16-L3Какой консольной командой запускается воркер, обрабатывающий сообщения из очередей Messenger?дадададада
T16-L5По умолчанию Messenger сериализует сообщения в JSON.нетданетдада
T16-L7Какой встроенный транспорт Messenger хранит сообщения в таблицах БД через Doctrine?дадададада
T28-L8Какой компонент Symfony управляет ассетами и importmap без node/webpack?дадададада
T29-L6Какая минорная версия ветки 8.x выйдет последней перед Symfony 9.0?дадададада
T21-L8Какая функция Twig выводит отладочную структуру переменной (массива, объекта)?дадададада
T15-L7Какое ключевое слово в определении window-функции разбивает строки на группы, для которых считается функция?дадададада
T17-L8Уровень SERIALIZABLE в PostgreSQL реализован блокировкой строк, которые читает транзакция.нетдададада
T20-L6В authorization code flow OAuth 2.0 какой параметр приходит в redirect_uri и обменивается на access-токен?дадададада
T20-L8Соль пароля нужно держать в секрете: без неё хеш нельзя проверить.нетнетнетдада
T18-L4Какой метод PHPUnit объявляет ожидание исключения определённого класса?дадададада
T01-L9Что выведет этот код? ```php echo intdiv(7, 2) . intdiv(-7, 2); ```дадададада
T03-L10Что выведет этот код? ```php echo '[' . substr('hello', -10) . ']'; ```дадададада
T04-L10Что выведет этот код? ```php $a = [[1, 'x', 2], [2, 'y', 1], [3, 'z', 2]]; usort($a, fn($p, $q) => $p[2] <=> $q[2]); echo implode('', array_column($a, 1)); ```дадададада
T05-L10Что выведет этот код? ```php function f(int $a, int $b): int { return $a - $b; } echo f(...['b' => 1, 'a' => 5]); ```дадададада
T05-L9Что выведет этот код? ```php class P { private int $v = 3; public function g(): int { return $this->v; } } $p = new P; $f = $p->g(...); $p = null; echo $f(); ```дадададада
T09-L9Что выведет этот код? ```php namespace N; use App\Foo as Baz; echo Baz::class . '|' . \Baz::class; ```дадададада
T12-L10Что выведет этот код на PHP 8.5? ```php echo (E_ALL & 2048) === 0 ? 'strict-out' : 'strict-in'; ```дадададада
T13-L10Что выведет этот код? ```php use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Contracts\EventDispatcher\Event; $d = new EventDispatcher(); $out = ''; $d->addListener('e', function () use (&$out) { $out .= 'B'; }, 10); $d->addListener('e', function () use (&$out) { $out .= 'A'; }); $d->addListener('e', function () use (&$out) { $out .= 'C'; }, 5); $d->dispatch(new Event(), 'e'); echo $out; ```дадададада
T16-L9Что выведет этот код? ```php use Symfony\Component\Messenger\MessageBus; use Symfony\Component\Messenger\Middleware\MiddlewareInterface; use Symfony\Component\Messenger\Middleware\StackInterface; use Symfony\Component\Messenger\Envelope; final class Trace implements MiddlewareInterface { public function __construct(private string $tag) {} public function handle(Envelope $e, StackInterface $stack): Envelope { echo $this->tag; return $stack->next()->handle($e, $stack); } } $bus = new MessageBus([new Trace('M1'), new Trace('M2')]); $bus->dispatch(new Envelope(new stdClass())); ```дадададада
T17-L10Что выведет эта последовательность команд psql? ```sql BEGIN; CREATE TEMP TABLE t (a int, UNIQUE (a) DEFERRABLE INITIALLY DEFERRED); INSERT INTO t VALUES (1); INSERT INTO t VALUES (1); SELECT count(*) FROM t; ```дадададада
T20-L9Клиент обращается к токен-эндпоинту (RFC 6749) с несуществующим client_id. Какое значение поля error вернёт эндпоинт?дадададада
T20-L10OAuth 2.0: клиент начал поток с response_type=token. В какой части redirect_uri авторизационный сервер передаёт access_token?дадададада
T24-L9Какая max-width у .container в Bootstrap 5.3 при ширине окна 992px?дадададада
T24-L10Какая утилита определит цвет текста в Bootstrap 5.3: `<p class="text-danger text-primary">…</p>`? Ответь именем класса-победителя.дадададада
T25-L9Слои: Domain, Application, Infrastructure. Правила deptrac: Application → Domain; Infrastructure → Domain, Application; Domain → только Domain. Сколько нарушений (Violations) покажет deptrac для этого класса? ```php namespace App\Domain; use App\Application\PlaceOrder; use App\Infrastructure\Db; class OrderService { public function __construct( private PlaceOrder $handler, private Db $db, ) {} } ```дадададада
T28-L9Проект обновлён с Symfony 6.4 на 8.1. Что выведет этот код на 8.1? ```php echo class_exists(\Symfony\Component\Security\Guard\AbstractGuardAuthenticator::class) ? 'yes' : 'no'; ```дадададада
T28-L10Проект обновлён с Symfony 6.4 на 8.1. Что выведет этот код на 8.1? ```php echo class_exists(\Symfony\Component\Routing\Loader\AnnotationClassLoader::class) ? 'yes' : 'no'; echo class_exists(\Symfony\Component\Routing\Loader\AttributeClassLoader::class) ? 'yes' : 'no'; ```дадададада

Все клетки

КлеткаВопросОтветы по прогонамВерный ответ
T01-L1
Синтаксис и операторы
Строки в двойных и одинарных кавычках обрабатываются одинаково, разница только в скорости.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T01-L2
Синтаксис и операторы
Оператор ?? работает по семантике isset и не порождает предупреждений для неопределённых переменных.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T01-L3
Синтаксис и операторы
Что выведет: echo 'a', 'b';run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓ab
T01-L4
Синтаксис и операторы
print возвращает значение 1 и может использоваться внутри выражения.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T01-L5
Синтаксис и операторы
Оператор ?: (элвис) возвращает левый операнд, если он ложный.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T01-L6
Синтаксис и операторы
В PHP 8 приоритет оператора конкатенации (.) ниже, чем у сложения и вычитания.run-01: — · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T01-L7
Синтаксис и операторы
Выражение 2 ** 3 ** 2 в PHP вычисляется как (2 ** 3) ** 2, то есть 64.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T01-L8
Синтаксис и операторы
Какую строку выведет: echo 'сумма: ' . 2 + 3; (PHP 8)?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗сумма: 5
T02-L1
Типы и сравнения
Массивы при строгом сравнении === считаются равными независимо от порядка элементов.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T02-L2
Типы и сравнения
Сравнение 0 == false возвращает false, потому что это строгое сравнение.run-01: ✓ · run-02: ✗ · run-03: ✗ · run-04: ✓ · run-05: ✗нет
T02-L3
Типы и сравнения
В PHP 8 выражение "abc" == 0 возвращает true.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T02-L4
Типы и сравнения
Значение null при нестрогом сравнении равно одновременно 0, пустой строке и false.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T02-L5
Типы и сравнения
Что вернёт выражение: (int) '42abc'?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓42
T02-L6
Типы и сравнения
Что вернёт выражение: '5' + 5?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓10
T02-L7
Типы и сравнения
При приведении к строке значение false превращается в "0".run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T02-L8
Типы и сравнения
Сравнение 0.1 + 0.2 === 0.3 возвращает false.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T03-L1
Строки
strrev() корректно переворачивает строку в UTF-8.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T03-L2
Строки
str_contains('Hello world', 'world') возвращает true.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T03-L3
Строки
str_pad() умеет дополнять строку только справа.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T03-L4
Строки
По умолчанию trim() срезает только пробелы, не трогая табы и переводы строк.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T03-L5
Строки
Сколько БАЙТ вернёт strlen('привет') для строки в UTF-8?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗12
T03-L6
Строки
Что вернёт substr('abcdef', -3)?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓def
T03-L7
Строки
ucfirst() изменяет строку, переданную ей, на месте.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T03-L8
Строки
В heredoc работают интерполяция переменных, а в nowdoc — нет.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T04-L1
Массивы
Функция sort() сохраняет связь ключей и значений массива.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T04-L2
Массивы
Строковый ключ '5' в массиве сохраняется как целое число 5.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T04-L3
Массивы
Функция in_array() по умолчанию использует строгое сравнение (===).run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T04-L4
Массивы
array_filter() без колбэка удаляет из массива все «пустые» (falsy) элементы.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T04-L5
Массивы
Функция array_slice() по умолчанию сохраняет исходные числовые ключи массива.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T04-L6
Массивы
Что вернёт array_slice([10, 20, 30, 40], 1, 2)?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗[20,30]
T04-L7
Массивы
Сколько элементов будет в count(['a' => 1] + ['a' => 9, 'b' => 2])?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓2
T04-L8
Массивы
Spread-оператор [...$a, ...$b] с PHP 8.1 поддерживает массивы со строковыми ключами.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T05-L1
Функции и замыкания
Именованные аргументы нельзя комбинировать с распаковкой массива ...$args в одном вызове.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T05-L2
Функции и замыкания
Анонимная функция без use видит переменные внешней области видимости.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T05-L3
Функции и замыкания
Что вернёт func_num_args() внутри function f($a) { return func_num_args(); } при вызове f(1, 2, 3)?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓3
T05-L4
Функции и замыкания
Тело стрелочной функции fn может состоять из нескольких выражений в фигурных скобках.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗нет
T05-L5
Функции и замыкания
Стрелочная функция fn захватывает внешние переменные по ссылке (лениво, при использовании).run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T05-L6
Функции и замыкания
Замыкание, объявленное как static function () {}, не захватывает $this.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T05-L7
Функции и замыкания
Что выведет: $x = 5; $f = function () use ($x) { return $x; }; $x = 7; echo $f();run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗5
T05-L8
Функции и замыкания
В «слабом» режиме типизации (без strict_types) передача строки "5" в параметр с типом int допустима.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T06-L1
ООП: классы и наследование
PHP поддерживает promotion свойств в конструкторе: public function __construct(private int $x) {}.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T06-L2
ООП: классы и наследование
Какое ключевое слово запрещает переопределять метод в подклассах?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓final
T06-L3
ООП: классы и наследование
Метод, объявленный как final, нельзя переопределить в подклассе.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T06-L4
ООП: классы и наследование
Свойства родителя с видимостью private доступны в подклассе.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T06-L5
ООП: классы и наследование
Что вернёт get_class(new class {})? Ответь частью имени до нулевого байта (без пути к файлу).run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗class@anonymous
T06-L6
ООП: классы и наследование
private-метод родителя не входит в контракт наследования: потомок может объявить метод с тем же именем с любой видимостью.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T06-L7
ООП: классы и наследование
Магический метод __get() вызывается только для несуществующих свойств.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T06-L8
ООП: классы и наследование
Что бросит повторное присваивание readonly-свойства — Exception или Error?run-01: ✗ · run-02: ✓ · run-03: ✗ · run-04: ✗ · run-05: ✗error
T07-L1
Интерфейсы, трейты, enum
Интерфейс может объявлять константы.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T07-L2
Интерфейсы, трейты, enum
Какой оператор проверяет, что объект реализует класс или интерфейс?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗instanceof
T07-L3
Интерфейсы, трейты, enum
Интерфейс может объявлять статические методы.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T07-L4
Интерфейсы, трейты, enum
Оператор instanceof проверяет только наследование классов: интерфейсы он не учитывает.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T07-L5
Интерфейсы, трейты, enum
Метод интерфейса может иметь реализацию по умолчанию, как метод трейта.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T07-L6
Интерфейсы, трейты, enum
Абстрактный метод в абстрактном классе может иметь видимость protected.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T07-L7
Интерфейсы, трейты, enum
Сколько элементов вернёт Foo::cases() для enum Foo { case A; case B; case C; }?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓3
T07-L8
Интерфейсы, трейты, enum
Трейт может объявлять константы.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T08-L1
Исключения и ошибки
Интерфейс Throwable — общий предок и для Exception, и для Error.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T08-L2
Исключения и ошибки
Блок catch (Exception $e) перехватит и TypeError, потому что TypeError в итоге наследуется от Exception.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T08-L3
Исключения и ошибки
Оператор @ подавляет и исключения тоже.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T08-L4
Исключения и ошибки
Какой класс ошибки бросит intdiv(5, 0)?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓divisionbyzeroerror
T08-L5
Исключения и ошибки
Блок finally выполняется только если исключение было поймано блоком catch.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T08-L6
Исключения и ошибки
Исключение, выброшенное внутри блока finally, никак не влияет на результат try-блока.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T08-L7
Исключения и ошибки
Что вернёт выражение: (bool) new Exception('x')?run-01: ✓ · run-02: ✓ · run-03: ✗ · run-04: ✓ · run-05: ✓true
T08-L8
Исключения и ошибки
Функции, зарегистрированные через register_shutdown_function(), выполняются при вызове exit.run-01: ✓ · run-02: ✗ · run-03: ✓ · run-04: ✗ · run-05: ✗да
T09-L1
Пространства имён и автозагрузка
Директива use App\Service\Mailer; сама по себе подключает файл с классом.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T09-L2
Пространства имён и автозагрузка
Что пишут после use, чтобы импортировать функцию (а не класс): слово function или const?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓function
T09-L3
Пространства имён и автозагрузка
В какой файл (путь от src/) PSR-4 «App\ → src/» положит класс App\Controller\Api\UserController?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓src/controller/api/usercontroller.php
T09-L4
Пространства имён и автозагрузка
Подключение vendor/autoload.php регистрирует обработчики через spl_autoload_register().run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T09-L5
Пространства имён и автозагрузка
Магическая константа __NAMESPACE__ содержит имя текущего пространства имён.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T09-L6
Пространства имён и автозагрузка
Относительное имя класса (без ведущего \) в new резолвится от глобального корня.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T09-L7
Пространства имён и автозагрузка
При маппинге PSR-4 «App\ → src/» класс App\Model\User лежит в файле src/Model/User.php.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T09-L8
Пространства имён и автозагрузка
Директиву use можно писать внутри тела функции — импорт будет действовать для этой функции.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T10-L1
Ссылки и область видимости
Массивы при присваивании копируются, а не передаются по ссылке.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T10-L2
Ссылки и область видимости
Что выведет: $a = [1, 2]; $b = $a; $b[] = 3; echo count($a);run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓2
T10-L3
Ссылки и область видимости
Внутри функции пользовательские переменные глобальной области недоступны без global, $GLOBALS или передачи параметром.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T10-L4
Ссылки и область видимости
unset($GLOBALS['x']) внутри функции удаляет глобальную переменную только для этой функции.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T10-L5
Ссылки и область видимости
Что выведет: function inc(&$x) { $x++; } $n = 5; inc($n); echo $n;run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓6
T10-L6
Ссылки и область видимости
Foreach по массиву (по значению) работает с «живым» массивом: изменения массива внутри цикла видны в этом же проходе.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T10-L7
Ссылки и область видимости
Статическое свойство класса у каждого экземпляра своё: изменения в одном объекте не видны в других.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T10-L8
Ссылки и область видимости
Массив может иметь булев ключ true, и он сохранится как bool.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗нет
T11-L1
Генераторы, итераторы, SPL
Внутри генератора можно использовать return со значением, и оно попадёт в $gen->getReturn().run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T11-L2
Генераторы, итераторы, SPL
Полностью пройденный генератор можно «перемотать» через rewind() и пройти снова.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✗нет
T11-L3
Генераторы, итераторы, SPL
Конструкция yield from делегирует проход другому генератору или итерируемому объекту.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T11-L4
Генераторы, итераторы, SPL
Что вернёт get_class(g()) для function g() { yield 1; }?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗generator
T11-L5
Генераторы, итераторы, SPL
Сколько элементов вернёт count(iterator_to_array((function () { yield from [1, 2, 3]; })()));run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓3
T11-L6
Генераторы, итераторы, SPL
Класс SplStack реализует очередь FIFO.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T11-L7
Генераторы, итераторы, SPL
ArrayIterator позволяет обернуть массив и обходить его через интерфейс Iterator.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T11-L8
Генераторы, итераторы, SPL
Объект класса ArrayObject нельзя обойти через foreach.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T12-L1
Конфигурация и безопасность
password_hash() генерирует соль автоматически — передавать её отдельно не нужно.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T12-L2
Конфигурация и безопасность
Алгоритм PASSWORD_DEFAULT в PHP 8 — это md5 с автоматически добавленной солью.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T12-L3
Конфигурация и безопасность
Что вернёт password_verify('secret', password_hash('secret', PASSWORD_DEFAULT))?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗true
T12-L4
Конфигурация и безопасность
Функция strip_tags() защищает от SQL-инъекций.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T12-L5
Конфигурация и безопасность
Функция session_regenerate_id() используется для защиты от фиксации сессии при входе пользователя.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T12-L6
Конфигурация и безопасность
Какая встроенная функция возвращает имя SAPI (например, cli)?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓php_sapi_name
T12-L7
Конфигурация и безопасность
session_destroy() удаляет данные сессии на сервере, но не cookie в браузере пользователя.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T12-L8
Конфигурация и безопасность
Без вызова session_start() массив $_SESSION автоматически загружается данными сессии.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
VC-L1
PHP 8.4–8.5
В какой версии PHP появилась функция array_find()?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗8.4
VC-L2
PHP 8.4–8.5
Property hooks (get/set прямо в объявлении свойства) вошли в PHP 8.4.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
VC-L3
PHP 8.4–8.5
Асимметричная видимость (public private(set) string $name) появилась в PHP 8.4.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
VC-L4
PHP 8.4–8.5
В какой версии PHP впервые появился атрибут #[\NoDiscard]? Ответь номером версии.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗8.5
VC-L5
PHP 8.4–8.5
В какой версии PHP впервые появился оператор конвейера |> (pipe)? Ответь номером версии.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗8.5
VC-L6
PHP 8.4–8.5
В какой версии PHP появился clone-with — синтаксис clone($obj, ['x' => 1])? Ответь номером версии.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗8.5
VC-L7
PHP 8.4–8.5
В какой версии PHP появились функции array_first() и array_last()?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗8.5
VC-L8
PHP 8.4–8.5
Для какой версии PHP был принят RFC Partial Function Application v2 (по состоянию на 07.11.2026)? Ответь номером версии.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗8.6
VF-L1
PHP: 8.6+ и будущее
Для какой версии PHP реализован RFC clamp_v2 (функция clamp()) по состоянию на 07.11.2026? Ответь номером версии.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗8.6
VF-L2
PHP: 8.6+ и будущее
RFC Context Managers v2 уже принят в PHP (на 07.11.2026).run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
VF-L3
PHP: 8.6+ и будущее
RFC Bound-Erased Generic Types (generics) был отклонён в 2026 году.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
VF-L4
PHP: 8.6+ и будущее
На 07.11.2026 RFC о включении многопоточности (ZTS) по умолчанию уже принят в PHP.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
VF-L5
PHP: 8.6+ и будущее
В PHP 8.5 дженериков (параметризованных типов) по-прежнему нет.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
VF-L6
PHP: 8.6+ и будущее
На 07.11.2026 последняя стабильная версия PHP — 8.5, а PHP 8.6 ещё не выпущена (GA — 19.11.2026).run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
VF-L7
PHP: 8.6+ и будущее
Ветка PHP 6 так и не вышла: после PHP 5.6 вышел сразу PHP 7.0.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
VF-L8
PHP: 8.6+ и будущее
RFC о добавлении атрибута #[\Deprecated] в ядро был принят.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T25-L1
Чистая архитектура
Правило зависимостей в чистой и луковичной архитектурах: внутренние слои не знают о внешних — зависимости направлены к центру.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T25-L2
Чистая архитектура
Сущности домена не импортируют ни Doctrine, ни Symfony — только язык и, возможно, стандартную библиотеку.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T25-L3
Чистая архитектура
Контроллеры и Twig-шаблоны относятся к слою бизнес-логики, потому что именно они вызывают use cases.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T25-L4
Чистая архитектура
Что находится в самом центре луковичной архитектуры?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗доменная модель
T25-L5
Чистая архитектура
Нарушение границ слоёв можно поймать автоматикой: анализатор зависимостей между слоями (например, deptrac) падает на запрещённом вызове.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T25-L6
Чистая архитектура
Use case (interactor) может принимать HTTP-запрос или EntityManager как аргументы — так проще.run-01: ✗ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T25-L7
Чистая архитектура
Как называется компонент, предоставляющий коллекцию агрегатов/сущностей, скрывая механизм хранения за интерфейсом?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✗репозиторий
T25-L8
Чистая архитектура
Замена PostgreSQL на другую БД в чистой архитектуре затрагивает только внешний слой — домен и use cases не меняются.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T26-L1
DDD
Агрегат в DDD — это просто другое название таблицы базы данных.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T26-L2
DDD
Value Object неизменяем и сравнивается по значениям полей, а не по идентификатору.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T26-L3
DDD
Как называется единственная точка внешнего входа в агрегат, через которую проходят все изменения?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗aggregate root
T26-L4
DDD
В DDD репозиторий объявляется на агрегат (его корень), а не на каждую сущность.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T26-L5
DDD
Ubiquitous language — единый язык модели, общий для разработчиков и предметных экспертов.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T26-L6
DDD
Как называется граница, внутри которой модель и её язык едины, а снаружи те же понятия — другие модели?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗bounded context
T26-L7
DDD
Анемичная модель (объекты только с геттерами/сеттерами, логика в сервисах) — рекомендуемый стиль DDD.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗нет
T26-L8
DDD
Bounded context означает, что у каждого контекста своя модель: одно и то же понятие в разных контекстах — разные классы.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T13-L1
Symfony
Сервисы в DI-контейнере Symfony по умолчанию создаются лениво — при первом обращении к ним.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T13-L2
Symfony
Какая консольная команда Symfony выводит список всех зарегистрированных маршрутов?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗debug:router
T13-L3
Symfony
Autowiring в Symfony требует вручную перечислять каждый сервис в конфигурации services.yaml.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T13-L4
Symfony
Twig-шаблоны компилируются в PHP-классы и кэшируются между запросами.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T13-L5
Symfony
Контейнер DI в dev-окружении Symfony пересобирается только после изменения отслеживаемых файлов, а не при каждом запросе.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T13-L6
Symfony
Какая переменная окружения выбирает активное окружение Symfony (dev/prod)?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓app_env
T13-L7
Symfony
Метод контроллера может быть private — маршрутизация Symfony работает с любыми методами класса.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T13-L8
Symfony
Подписчики событий (EventSubscriber) всегда получают события раньше слушателей (listeners), потому что интерфейс даёт им приоритет.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T22-L1
Symfony: Security и формы
В современном Symfony (6.0+) аутентификация строится на классах-authenticator (AuthenticatorInterface); прежняя система guard удалена.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T22-L2
Symfony: Security и формы
Какой атрибут Symfony проверяет роль/право прямо на методе контроллера (без него — 403)?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓isgranted
T22-L3
Symfony: Security и формы
Voters (голосующие) — механизм Symfony для проверки доступа к конкретному объекту: isGranted('EDIT', $post).run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T22-L4
Symfony: Security и формы
Ограничения валидации в современных Symfony (7+) объявляются PHP-атрибутами (#[Assert\NotBlank]); аннотации-докблоки больше не поддерживаются.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T22-L5
Symfony: Security и формы
CSRF-защита форм в Symfony включена по умолчанию: форма проверяет токен при отправке.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T22-L6
Symfony: Security и формы
Валидация формы в Symfony выполняется на сервере, даже если клиентская (HTML5) проверка прошла.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T22-L7
Symfony: Security и формы
Какая команда Symfony maker генерирует класс формы (FormType)?run-01: ✗ · run-02: ✓ · run-03: ✗ · run-04: ✗ · run-05: ✗make:form
T22-L8
Symfony: Security и формы
Symfony хранит пароль пользователя в сессии в открытом виде (plaintext).run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T23-L1
Symfony: конфигурация и сервисы
Конфигурация бандлов Symfony лежит в config/packages — по одному файлу на бандл или тему.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T23-L2
Symfony: конфигурация и сервисы
Файл .env с dev-дефолтами коммитится в репозиторий, а настоящие секреты живут в некоммитимом .env.local.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T23-L3
Symfony: конфигурация и сервисы
Какая команда Symfony выводит зарегистрированные сервисы контейнера и их алиасы?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗debug:container
T23-L4
Symfony: конфигурация и сервисы
Контейнер Symfony позволяет менять параметры в рантайме: $container->setParameter() работает из контроллера.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T23-L5
Symfony: конфигурация и сервисы
По умолчанию сервисы в Symfony публичны (public: true) — их достают из контейнера напрямую.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T23-L6
Symfony: конфигурация и сервисы
Без конфигурационного файла в config/packages бандл не заработает — настройки обязательны для каждого бандла.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T23-L7
Symfony: конфигурация и сервисы
Значения переменных окружения подставляются в services.yaml синтаксисом %env(VAR)%.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✗ · run-05: ✗да
T23-L8
Symfony: конфигурация и сервисы
Какая переменная окружения Symfony включает режим отладки (влияет на профайлер и отладку Twig)?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗app_debug
T16-L1
Symfony: Messenger
Одно сообщение в Symfony Messenger может обрабатывать только один обработчик (handler).run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗нет
T16-L2
Symfony: Messenger
Транспорт sync в Messenger ставит сообщение в очередь и обрабатывает его воркером, как и async.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗нет
T16-L3
Symfony: Messenger
Какой консольной командой запускается воркер, обрабатывающий сообщения из очередей Messenger?run-01: ✗ · run-02: ✗ · run-03: ✓ · run-04: ✗ · run-05: ✓messenger:consume
T16-L4
Symfony: Messenger
Повторы неудачных сообщений (retry_strategy) настраиваются на уровне транспорта Messenger.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T16-L5
Symfony: Messenger
По умолчанию Messenger сериализует сообщения в JSON.run-01: ✓ · run-02: ✗ · run-03: ✓ · run-04: ✗ · run-05: ✗нет
T16-L6
Symfony: Messenger
Symfony Scheduler по расписанию порождает сообщения и отправляет их через Messenger.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T16-L7
Symfony: Messenger
Какой встроенный транспорт Messenger хранит сообщения в таблицах БД через Doctrine?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✗ · run-05: ✓doctrine
T16-L8
Symfony: Messenger
Пайплайн Messenger можно расширять собственными middleware, встраивая их до или после встроенных.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T28-L1
Symfony: версии
Мажорные релизы Symfony выходят раз в два года, минорные — каждые шесть месяцев (в мае и ноябре).run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T28-L2
Symfony: версии
Какой минимальной версии PHP требует Symfony 8?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗8.4
T28-L3
Symfony: версии
Symfony 7.0 сохранила поддержку аннотаций в докблоках (валидация, маршруты).run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗нет
T28-L4
Symfony: версии
AssetMapper позволяет управлять CSS/JS без node и webpack — через importmap.php.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T28-L5
Symfony: версии
Symfony 6.4 — обычный релиз без длительной поддержки.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T28-L6
Symfony: версии
При переходе на новую мажорную версию Symfony деприкейшены прошлой ветки продолжают работать — мажорные релизы их не удаляют.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T28-L7
Symfony: версии
Каждый мажорный релиз Symfony сопровождается UPGRADE-гайдом со списком изменений.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T28-L8
Symfony: версии
Какой компонент Symfony управляет ассетами и importmap без node/webpack?run-01: ✗ · run-02: ✗ · run-03: ✓ · run-04: ✗ · run-05: ✗asset-mapper
T29-L1
Symfony: 8.2 и будущее
На 07.11.2026 Symfony 8.2 уже выпущена.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T29-L2
Symfony: 8.2 и будущее
По состоянию на 07.11.2026 Symfony 8.2 запланирована на ноябрь 2026 — в обычном шестимесячном цикле.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T29-L3
Symfony: 8.2 и будущее
Какая версия Symfony выйдет следующей после 8.1 (по состоянию на 07.11.2026)?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗8.2
T29-L4
Symfony: 8.2 и будущее
Symfony 8.2 — мажорный релиз, требующий переписывания приложений под новые API.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T29-L5
Symfony: 8.2 и будущее
Обновление внутри мажорной ветки (8.1 → 8.2) не должно требовать изменений кода — обратная совместимость сохраняется.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T29-L6
Symfony: 8.2 и будущее
Какая минорная версия ветки 8.x выйдет последней перед Symfony 9.0?run-01: ✓ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✓8.4
T29-L7
Symfony: 8.2 и будущее
Symfony 8.2 потребует обновления PHP до 8.5 — придётся обновлять PHP вместе с ней.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T29-L8
Symfony: 8.2 и будущее
Deprecations, добавленные в ветке 8.x, будут удалены не раньше Symfony 9.0.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T21-L1
Twig
Внутри {{ }} в Twig можно вызывать произвольный PHP-код напрямую.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T21-L2
Twig
Twig по умолчанию автоматически экранирует выводимые переменные.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T21-L3
Twig
Фильтр |e в Twig экранирует строку для безопасного вывода в HTML-контексте.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T21-L4
Twig
Какой фильтр из twig/intl-extra форматирует число с учётом локали?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗format_number
T21-L5
Twig
Фильтр |raw отключает автоэкранирование для значения.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T21-L6
Twig
В Twig {{ }} выводит значение выражения, а {% %} выполняет теги — условия, циклы, set.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T21-L7
Twig
В Twig нельзя объявить переменную в шаблоне — значения только передаются из контроллера.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T21-L8
Twig
Какая функция Twig выводит отладочную структуру переменной (массива, объекта)?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✓ · run-05: ✗dump
T24-L1
Bootstrap
Bootstrap — это CSS/JS-библиотека готовых компонентов интерфейса, а не SPA-фреймворк.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T24-L2
Bootstrap
Какой класс Bootstrap задаёт адаптивный контейнер с фиксированной максимальной шириной по брейкпоинтам?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓container
T24-L3
Bootstrap
Сетка Bootstrap построена на CSS float и делит строку на 16 колонок.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T24-L4
Bootstrap
Именованные брейкпоинты Bootstrap (с инфиксом в классах) — sm, md, lg, xl, xxl; их пять.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T24-L5
Bootstrap
Утилиты вроде .mt-3 или .px-2 используют шаг spacing-шкалы: число — множитель $spacer.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗нет
T24-L6
Bootstrap
Какой data-атрибут Bootstrap 5 включает интерактивный компонент (например, dropdown) на элементе?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓data-bs-toggle
T24-L7
Bootstrap
Компоненты Bootstrap 5 работают без jQuery — на чистом vanilla JS.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T24-L8
Bootstrap
Тёмную тему в Bootstrap включают классом .dark на корневом элементе.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗нет
T14-L1
Doctrine
Doctrine ORM сам создаёт таблицы в базе при первом обращении к сущности в рантайме.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T14-L2
Doctrine
Какой метод EntityManager помечает новый объект как управляемый, не выполняя SQL до flush()?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓persist
T14-L3
Doctrine
В Doctrine ORM 3 метод EntityManager::merge() доступен и делает переданный объект управляемым.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗нет
T14-L4
Doctrine
DQL-запросы пишутся в терминах сущностей и их полей, а не таблиц и столбцов.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T14-L5
Doctrine
Что вернёт $repository->find(999), если записи с идентификатором 999 нет?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓null
T14-L6
Doctrine
DoctrineBundle в Symfony автоматически вызывает flush() в конце каждого запроса.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T14-L7
Doctrine
Для управляемой сущности достаточно изменить свойство: flush() зафиксирует изменение без вызова persist() — Unit of Work отслеживает изменения.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T14-L8
Doctrine
remove() выполняет SQL DELETE сразу, не дожидаясь flush().run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T15-L1
PostgreSQL
PostgreSQL использует MVCC, поэтому читатели блокируют писателей, а писатели — читателей.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T15-L2
PostgreSQL
Какая команда SQL показывает план выполнения запроса, не выполняя сам запрос?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓explain
T15-L3
PostgreSQL
SERIAL и GENERATED ... AS IDENTITY — это два названия одного и того же механизма.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T15-L4
PostgreSQL
UNIQUE-ограничение PostgreSQL по умолчанию допускает только одну строку с NULL в столбце.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T15-L5
PostgreSQL
Какая агрегатная функция PostgreSQL склеивает строки с разделителем?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓string_agg
T15-L6
PostgreSQL
Обычный VACUUM возвращает место, занятое «мёртвыми» кортежами, операционной системе.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T15-L7
PostgreSQL
Какое ключевое слово в определении window-функции разбивает строки на группы, для которых считается функция?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗partition by
T15-L8
PostgreSQL
Уровень изоляции READ COMMITTED защищает от неповторяющегося чтения (non-repeatable read).run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T17-L1
PostgreSQL: транзакции и индексы
По умолчанию PostgreSQL выполняет каждый отдельный SQL-оператор в собственной неявной транзакции (autocommit).run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗да
T17-L2
PostgreSQL: транзакции и индексы
Какая SQL-команда завершает транзакцию, сохраняя все её изменения?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓commit
T17-L3
PostgreSQL: транзакции и индексы
Индексы ускоряют не только SELECT: UPDATE и DELETE с поиском по индексированному столбцу тоже выигрывают.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T17-L4
PostgreSQL: транзакции и индексы
Для отката части операторов внутри транзакции PostgreSQL использует SAVEPOINT.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T17-L5
PostgreSQL: транзакции и индексы
EXPLAIN ANALYZE показывает план запроса, не выполняя сам запрос.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗нет
T17-L6
PostgreSQL: транзакции и индексы
Какое расширение PostgreSQL добавляет векторные типы и индексы для поиска по эмбеддингам?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓vector
T17-L7
PostgreSQL: транзакции и индексы
Частичный индекс (CREATE INDEX ... WHERE ...) строится только по строкам, удовлетворяющим условию.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T17-L8
PostgreSQL: транзакции и индексы
Уровень SERIALIZABLE в PostgreSQL реализован блокировкой строк, которые читает транзакция.run-01: ✓ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗нет
T19-L1
HTTP и REST API
HTTP-статус 201 означает, что в результате запроса создан новый ресурс.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T19-L2
HTTP и REST API
Какой HTTP-статус означает успешный запрос с пустым телом ответа (например, после DELETE)?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓204
T19-L3
HTTP и REST API
Метод DELETE идемпотентен по спецификации HTTP: повторный запрос по тому же ресурсу не меняет результат.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T19-L4
HTTP и REST API
Заголовок Access-Control-Allow-Origin отправляет клиент, чтобы сервер разрешил принимать запросы с другого origin.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T19-L5
HTTP и REST API
Код 429 Too Many Requests используется, когда клиент превысил лимит запросов (rate limiting).run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T19-L6
HTTP и REST API
Коды 5xx означают ошибку клиента, а 4xx — ошибку на стороне сервера.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T19-L7
HTTP и REST API
Какой HTTP-заголовок указывает MIME-тип тела запроса или ответа?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓content-type
T19-L8
HTTP и REST API
PATCH не обязан быть идемпотентным по RFC 5789, в отличие от PUT.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T20-L1
Безопасность и OAuth
Проверить пароль достаточно сравнением его хеша с хешем из базы обычным оператором ==.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T20-L2
Безопасность и OAuth
CSRF-токен выдаётся сервером (привязан к сессии) и проверяется на сервере при unsafe-запросах (POST и т.п.).run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T20-L3
Безопасность и OAuth
Какой HTTP-заголовок включает политику CSP (Content Security Policy)?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓content-security-policy
T20-L4
Безопасность и OAuth
OAuth 2.0 — протокол аутентификации: access-токен сообщает, кто именно пользователь.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T20-L5
Безопасность и OAuth
XSS предотвращается валидацией ввода на сервере перед записью в базу.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T20-L6
Безопасность и OAuth
В authorization code flow OAuth 2.0 какой параметр приходит в redirect_uri и обменивается на access-токен?run-01: ✓ · run-02: ✗ · run-03: ✓ · run-04: ✗ · run-05: ✓code
T20-L7
Безопасность и OAuth
Refresh-токен живёт дольше access-токена и позволяет получить новый access-токен без повторного входа пользователя.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T20-L8
Безопасность и OAuth
Соль пароля нужно держать в секрете: без неё хеш нельзя проверить.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✗ · run-05: ✗нет
T18-L1
Тестирование: PHPUnit
PHPUnit выполняет тестовые методы любого класса — наследовать TestCase не обязательно.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T18-L2
Тестирование: PHPUnit
Метод setUp() в PHPUnit вызывается один раз перед всеми тестами класса.run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗нет
T18-L3
Тестирование: PHPUnit
Поставщик данных (data provider) позволяет прогнать тест ровно с одним набором аргументов.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T18-L4
Тестирование: PHPUnit
Какой метод PHPUnit объявляет ожидание исключения определённого класса?run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓expectexception
T18-L5
Тестирование: PHPUnit
В PHPUnit стаб (stub) проверяет, какие методы на нём вызывали, а мок (mock) только подставляет данные.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T18-L6
Тестирование: PHPUnit
В PHPUnit 10+ рекомендуемый способ передачи данных в тест — атрибут #[DataProvider] (аннотация @dataProvider устарела).run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓да
T18-L7
Тестирование: PHPUnit
В PHPUnit нельзя объявить зависимость одного теста от результата другого.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓нет
T18-L8
Тестирование: PHPUnit
Какая опция командной строки PHPUnit включает случайный порядок выполнения тестов?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗--order-by=random
T01-L9
Синтаксис и операторы
Что выведет этот код? ```php echo intdiv(7, 2) . intdiv(-7, 2); ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗3-3
T01-L10
Синтаксис и операторы
Что выведет этот код? ```php echo -3 ** 2; ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗-9
T02-L9
Типы и сравнения
Что выведет этот код? ```php echo '1e1' == '10' ? 'true' : 'false'; ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗true
T02-L10
Типы и сравнения
Что выведет этот код? ```php switch ('a') { case 0: echo 'zero'; break; default: echo 'other'; } ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓other
T03-L9
Строки
Что выведет этот код? ```php echo strtr('abc', ['a' => '1', 'ab' => '2']); ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗2c
T03-L10
Строки
Что выведет этот код? ```php echo '[' . substr('hello', -10) . ']'; ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✓ · run-05: ✗[hello]
T04-L9
Массивы
Что выведет этот код? ```php $a = ['k' => 1, 'n' => 2]; $b = ['k' => 9, 'm' => 3]; echo implode(',', array_keys($a + $b)); ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓k,n,m
T04-L10
Массивы
Что выведет этот код? ```php $a = [[1, 'x', 2], [2, 'y', 1], [3, 'z', 2]]; usort($a, fn($p, $q) => $p[2] <=> $q[2]); echo implode('', array_column($a, 1)); ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗yxz
T05-L10
Функции и замыкания
Что выведет этот код? ```php function f(int $a, int $b): int { return $a - $b; } echo f(...['b' => 1, 'a' => 5]); ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗4
T05-L9
Функции и замыкания
Что выведет этот код? ```php class P { private int $v = 3; public function g(): int { return $this->v; } } $p = new P; $f = $p->g(...); $p = null; echo $f(); ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗3
T06-L9
ООП: классы и наследование
Что выведет этот код? ```php class A { public function who(): string { return static::class; } } class B extends A {} echo (new B)->who(); ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓b
T06-L10
ООП: классы и наследование
Что выведет этот код на PHP 8.5? ```php class C { public int $x = 0 { set { $this->x = $value * 2; } } } $c = new C; $c->x = 5; echo $c->x; ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓10
T07-L9
Интерфейсы, трейты, enum
Что выведет этот код? ```php trait TA { public function f(): string { return 'A'; } } trait TB { public function f(): string { return 'B'; } } class TC { use TA, TB { TB::f insteadof TA; TA::f as g; } } echo (new TC)->f() . (new TC)->g(); ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓ba
T07-L10
Интерфейсы, трейты, enum
Что выведет этот код? ```php trait Counter { public static int $n = 0; } class CX { use Counter; } class CY { use Counter; } CX::$n = 1; echo CY::$n; ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗0
T08-L10
Исключения и ошибки
Что выведет этот код? ```php function f(): int { try { return 1; } finally { return 2; } } echo f(); ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓2
T08-L9
Исключения и ошибки
Что выведет этот код? ```php try { try { throw new RuntimeException('first'); } finally { throw new LogicException('second'); } } catch (LogicException $e) { echo $e->getMessage(); } ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓second
T09-L9
Пространства имён и автозагрузка
Что выведет этот код? ```php namespace N; use App\Foo as Baz; echo Baz::class . '|' . \Baz::class; ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗app\foo|baz
T09-L10
Пространства имён и автозагрузка
Что выведет этот код? ```php namespace Ns; class Foo {} $c = 'Foo'; echo (class_exists($c) ? 'yes' : 'no') . (class_exists(__NAMESPACE__ . '\\' . $c) ? 'yes' : 'no'); ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗noyes
T10-L9
Ссылки и область видимости
Что выведет этот код? ```php $a = [1, 2, 3]; foreach ($a as &$v) {} $v = 99; echo implode(',', $a); ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗1,2,99
T10-L10
Ссылки и область видимости
Что выведет этот код? ```php class A { public function inc(): int { static $n = 0; return ++$n; } } class B extends A {} $a = new A; $b = new B; $a->inc(); $b->inc(); echo $a->inc(); ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗3
T11-L9
Генераторы, итераторы, SPL
Что выведет этот код? ```php function g(): Generator { $x = yield 1; return $x + 1; } $g = g(); $g->send(10); echo $g->getReturn(); ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓11
T11-L10
Генераторы, итераторы, SPL
Что выведет этот код? ```php function inner(): Generator { yield 1; yield 2; return 'ok'; } function outer(): Generator { $r = yield from inner(); yield $r; } echo implode(',', iterator_to_array(outer())); ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗ok,2
T12-L9
Конфигурация и безопасность
Что выведет этот код? ```php $hash = password_hash('x', PASSWORD_BCRYPT, ['cost' => 4]); echo password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 4]) ? 'yes' : 'no'; echo password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 5]) ? 'yes' : 'no'; ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗noyes
T12-L10
Конфигурация и безопасность
Что выведет этот код на PHP 8.5? ```php echo (E_ALL & 2048) === 0 ? 'strict-out' : 'strict-in'; ```run-01: ✓ · run-02: ✗ · run-03: ✓ · run-04: ✓ · run-05: ✓strict-out
T13-L9
Symfony
Что выведет этот код? ```php use Symfony\Component\HttpFoundation\Request; $r = Request::create('/demo', 'GET', [], [], [], ['HTTP_X_TOKEN' => 'abc']); echo $r->headers->get('X-Token') === 'abc' ? 'mapped' : 'missing'; ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓mapped
T13-L10
Symfony
Что выведет этот код? ```php use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Contracts\EventDispatcher\Event; $d = new EventDispatcher(); $out = ''; $d->addListener('e', function () use (&$out) { $out .= 'B'; }, 10); $d->addListener('e', function () use (&$out) { $out .= 'A'; }); $d->addListener('e', function () use (&$out) { $out .= 'C'; }, 5); $d->dispatch(new Event(), 'e'); echo $out; ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗bca
T14-L10
Doctrine
Дано: Doctrine ORM 3, EntityManager на SQLite in-memory, entity User с автоинкрементным первичным ключом. Таблица users пуста. Что выведет этот код? ```php $u = new User(name: 'A'); $em->persist($u); $em->flush(); $a = $em->find(User::class, $u->getId()); $b = $em->find(User::class, $u->getId()); echo spl_object_id($a) === spl_object_id($b) ? 'same' : 'diff'; ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓same
T14-L9
Doctrine
Дано: Doctrine ORM 3, EntityManager на SQLite in-memory, entity User с автоинкрементным первичным ключом. Таблица users пуста. Что выведет этот код? ```php $u = new User(name: 'B'); $em->persist($u); $em->remove($u); $em->flush(); echo count($em->getConnection()->fetchAllAssociative('SELECT * FROM users')); ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓0
T15-L10
PostgreSQL
Что вернёт этот SQL-запрос (PostgreSQL 17)? ```sql CREATE TEMP TABLE t (x int); INSERT INTO t VALUES (1), (NULL); SELECT count(x) FROM t; ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗1
T15-L9
PostgreSQL
Что вернёт этот SQL-запрос (PostgreSQL 17)? ```sql CREATE TEMP TABLE t (id int, x int); INSERT INTO t VALUES (1, 10), (2, 20), (3, 30); SELECT string_agg(s::text, ',' ORDER BY id) FROM ( SELECT id, sum(x) OVER (ORDER BY id) AS s FROM t ) q; ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗10,30,60
T16-L9
Symfony: Messenger
Что выведет этот код? ```php use Symfony\Component\Messenger\MessageBus; use Symfony\Component\Messenger\Middleware\MiddlewareInterface; use Symfony\Component\Messenger\Middleware\StackInterface; use Symfony\Component\Messenger\Envelope; final class Trace implements MiddlewareInterface { public function __construct(private string $tag) {} public function handle(Envelope $e, StackInterface $stack): Envelope { echo $this->tag; return $stack->next()->handle($e, $stack); } } $bus = new MessageBus([new Trace('M1'), new Trace('M2')]); $bus->dispatch(new Envelope(new stdClass())); ```run-01: ✗ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓m1m2
T16-L10
Symfony: Messenger
Что выведет этот код? ```php use Symfony\Component\Messenger\MessageBus; use Symfony\Component\Messenger\Middleware\HandleMessageMiddleware; use Symfony\Component\Messenger\Handler\HandlersLocator; use Symfony\Component\Messenger\Handler\HandlerDescriptor; use Symfony\Component\Messenger\Envelope; class Ping {} $n = 0; $d1 = new HandlerDescriptor(function (Ping $m) use (&$n) { $n += 1; }, ['alias' => 'h1']); $d2 = new HandlerDescriptor(function (Ping $m) use (&$n) { $n += 10; }, ['alias' => 'h2']); $bus = new MessageBus([ new HandleMessageMiddleware(new HandlersLocator([Ping::class => [$d1, $d2]])), ]); $bus->dispatch(new Envelope(new Ping())); echo $n; ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗11
T17-L9
PostgreSQL: транзакции и индексы
Что вернёт этот SQL-запрос (PostgreSQL 17)? ```sql CREATE TEMP TABLE t (a int); CREATE UNIQUE INDEX ON t (a); INSERT INTO t VALUES (1) ON CONFLICT DO NOTHING; INSERT INTO t VALUES (1) ON CONFLICT DO NOTHING; SELECT count(*) FROM t; ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓1
T17-L10
PostgreSQL: транзакции и индексы
Что выведет эта последовательность команд psql? ```sql BEGIN; CREATE TEMP TABLE t (a int, UNIQUE (a) DEFERRABLE INITIALLY DEFERRED); INSERT INTO t VALUES (1); INSERT INTO t VALUES (1); SELECT count(*) FROM t; ```run-01: ✓ · run-02: ✓ · run-03: ✗ · run-04: ✗ · run-05: ✓2
T18-L9
Тестирование: PHPUnit
Сколько тестов выполнит эта команда? ```php use PHPUnit\Framework\TestCase; use PHPUnit\Framework\Attributes\DataProvider; final class CalcTest extends TestCase { public static function prov(): array { return [[1], [2], [3]]; } #[DataProvider('prov')] public function test_sum(int $x): void { $this->assertTrue($x > 0); } #[DataProvider('prov')] public function test_sum_abs(int $x): void { $this->assertTrue($x > 0); } public function test_other(): void { $this->assertTrue(true); } } ``` Команда: `phpunit CalcTest.php --filter test_sum` (PHPUnit 10.5)run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗6
T18-L10
Тестирование: PHPUnit
Сколько тестов выполнит эта команда и сколько из них завершится failure? Ответь двумя числами через запятую (выполнено, упало). ```php use PHPUnit\Framework\TestCase; use PHPUnit\Framework\Attributes\DataProvider; final class Calc2Test extends TestCase { public function prov(): array { return [[1], [-1]]; } #[DataProvider('prov')] public function test_x(int $x): void { $this->assertTrue($x > 0); } } ``` Команда: `phpunit Calc2Test.php` (PHPUnit 10.5)run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗2,1
T19-L9
HTTP и REST API
Какой HTTP-метод отправит эта команда? ```bash curl -s -d 'a=1' http://demo.local/api ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓post
T19-L10
HTTP и REST API
Какой HTTP-метод отправит эта команда? ```bash curl -s -G -d 'a=1' http://demo.local/api ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗get
T20-L9
Безопасность и OAuth
Клиент обращается к токен-эндпоинту (RFC 6749) с несуществующим client_id. Какое значение поля error вернёт эндпоинт?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗invalid_client
T20-L10
Безопасность и OAuth
OAuth 2.0: клиент начал поток с response_type=token. В какой части redirect_uri авторизационный сервер передаёт access_token?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗fragment
T21-L9
Twig
Что выведет этот шаблон Twig? ```twig {{ false|default(2) * 3 }} ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓6
T21-L10
Twig
Какой класс исключения выбросит render() этого шаблона? ```twig {{ 'a' ~ 1 + 2 }} ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗runtimeerror
T22-L9
Symfony: Security и формы
Что выведет этот код? ```php use Symfony\Component\Validator\Validation; use Symfony\Component\Validator\Constraints as Assert; $v = Validation::createValidator(); echo count($v->validate([''], [new Assert\NotBlank()])); ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗0
T22-L10
Symfony: Security и формы
Что выведет этот код? ```php use Symfony\Component\Form\Forms; use Symfony\Component\Form\Extension\Core\Type\TextType; $factory = Forms::createFormFactoryBuilder()->getFormFactory(); $form = $factory->create(TextType::class); try { echo $form->isValid() ? 'valid' : 'invalid'; } catch (Throwable $e) { echo get_class($e); } ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗symfony\component\form\exception\logicexception
T23-L9
Symfony: конфигурация и сервисы
Что выведет этот код? ```php use Symfony\Component\DependencyInjection\ContainerBuilder; $c = new ContainerBuilder(); $c->register('a', stdClass::class)->setPublic(true); $c->compile(); echo spl_object_id($c->get('a')) === spl_object_id($c->get('a')) ? 'same' : 'diff'; ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓same
T23-L10
Symfony: конфигурация и сервисы
Что выведет этот код? ```php use Symfony\Component\DependencyInjection\ContainerBuilder; $c = new ContainerBuilder(); $c->setParameter('name', 'Bob'); $c->setParameter('greeting', 'hi %name%'); $c->setParameter('message', '%greeting%!'); $c->compile(); echo $c->getParameter('message'); ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓hi bob!
T24-L9
Bootstrap
Какая max-width у .container в Bootstrap 5.3 при ширине окна 992px?run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗960
T24-L10
Bootstrap
Какая утилита определит цвет текста в Bootstrap 5.3: `<p class="text-danger text-primary">…</p>`? Ответь именем класса-победителя.run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓text-danger
T25-L9
Чистая архитектура
Слои: Domain, Application, Infrastructure. Правила deptrac: Application → Domain; Infrastructure → Domain, Application; Domain → только Domain. Сколько нарушений (Violations) покажет deptrac для этого класса? ```php namespace App\Domain; use App\Application\PlaceOrder; use App\Infrastructure\Db; class OrderService { public function __construct( private PlaceOrder $handler, private Db $db, ) {} } ```run-01: ✗ · run-02: ✗ · run-03: ✓ · run-04: ✗ · run-05: ✗2
T25-L10
Чистая архитектура
Слои: Domain, Application, Infrastructure. Правила deptrac: Application → Domain; Infrastructure → Domain, Application; Domain → только Domain. Сколько нарушений (Violations) покажет deptrac для этого класса? ```php namespace App\Domain; use App\Application\PlaceOrder; use App\Infrastructure\Db; class BillingService { public function __construct( private PlaceOrder $handler, private Db $db, private \App\Infrastructure\Logger $logger, ) {} } ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗3
T26-L10
DDD
Что выведет этот код? ```php final class Money { public function __construct(public readonly int $amount) {} public function add(Money $o): Money { return new self($this->amount + $o->amount); } } $a = new Money(10); $c = $a->add(new Money(5)); echo $a->amount . ',' . $c->amount; ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗10,15
T26-L9
DDD
Что выведет этот код? ```php final class Order { private array $items = []; public function add(string $sku): void { $this->items[$sku] = true; } public function count(): int { return count($this->items); } public function remove(string $sku): void { if (count($this->items) === 1) { throw new DomainException('last item'); } unset($this->items[$sku]); } } $o = new Order; $o->add('a'); try { $o->remove('a'); } catch (DomainException) { } echo $o->count(); ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗1
VC-L9
PHP 8.4–8.5
Что выведет этот код на PHP 8.5? ```php class C { public function hi(): string { return 'hi'; } } echo new C()->hi(); ```run-01: ✓ · run-02: ✓ · run-03: ✓ · run-04: ✓ · run-05: ✓hi
VC-L10
PHP 8.4–8.5
Что выведет этот код на PHP 8.5? ```php class Heavy { public int $v = 0; } $r = new ReflectionClass(Heavy::class); $o = $r->newLazyGhost(function (Heavy $obj) { $obj->v = 21; }); echo $r->isUninitializedLazyObject($o) ? 'yes' : 'no'; $o->v; echo $r->isUninitializedLazyObject($o) ? 'yes' : 'no'; ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗yesno
T28-L9
Symfony: версии
Проект обновлён с Symfony 6.4 на 8.1. Что выведет этот код на 8.1? ```php echo class_exists(\Symfony\Component\Security\Guard\AbstractGuardAuthenticator::class) ? 'yes' : 'no'; ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗no
T28-L10
Symfony: версии
Проект обновлён с Symfony 6.4 на 8.1. Что выведет этот код на 8.1? ```php echo class_exists(\Symfony\Component\Routing\Loader\AnnotationClassLoader::class) ? 'yes' : 'no'; echo class_exists(\Symfony\Component\Routing\Loader\AttributeClassLoader::class) ? 'yes' : 'no'; ```run-01: ✗ · run-02: ✗ · run-03: ✗ · run-04: ✗ · run-05: ✗noyes