Карта знаний PHP — orcarouter/Qwen3.8-27B-Uncensored:ctx100k: 5 прогонов
тепловая карта: клетка = доля верных ответов по прогонам (0% красная → 100% зелёная, число внутри — % верных); пунктир — нестабильная клетка (флип: ответы прогонов не совпали); протокол клетки как в одиночной карте.
Прогонов: 5
Средняя точность: 87.1%
(разброс 204–214 из 240)
Семейства: PHP 94.4% · PHP+версии 87.1% · Symfony 89.4% · Symfony+версии 83.3% · БД и ORM 90.8% · Архитектура 85.0% · Фронтенд 82.5% · HTTP 100.0% · Безопасность 97.5% · Тесты 87.5% · Глубина 69.6% · Всего 87.1%
Токены по всем прогонам: 212740 вх / 79242 вых
Флипующих клеток: 66 / 240
Разобрано JSON: 99.4%
(не-JSON: 9 из 1480)
Стабильность = доля клеток, где все прогоны ответили
одинаково; флип (ответы расходятся) — знание под вопросом
Тепловая карта
0% верных
50%
100%
флип (ответы прогонов расходятся)
L1
L2
L3
L4
L5
L6
L7
L8
L9
L10
итог
Синтаксис и операторы
100
T01-L1 · Синтаксис и операторы
Строки в двойных и одинарных кавычках обрабатываются одинаково, разница только в скорости.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Строки в двойных и одинарных кавычках обрабатываются одинаково, разница только в скорости.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T01-L2 · Синтаксис и операторы
Оператор ?? работает по семантике isset и не порождает предупреждений для неопределённых переменных.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Оператор ?? работает по семантике isset и не порождает предупреждений для неопределённых переменных.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T01-L3 · Синтаксис и операторы
Что выведет: echo 'a', 'b';
Верный ответ: ab
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет: echo 'a', 'b';
Верный ответ: ab
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T01-L4 · Синтаксис и операторы
print возвращает значение 1 и может использоваться внутри выражения.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
print возвращает значение 1 и может использоваться внутри выражения.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T01-L5 · Синтаксис и операторы
Оператор ?: (элвис) возвращает левый операнд, если он ложный.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Оператор ?: (элвис) возвращает левый операнд, если он ложный.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
40
T01-L6 · Синтаксис и операторы
В PHP 8 приоритет оператора конкатенации (.) ниже, чем у сложения и вычитания.
Верный ответ: да
run-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✓
В PHP 8 приоритет оператора конкатенации (.) ниже, чем у сложения и вычитания.
Верный ответ: да
run-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✓
100
T01-L7 · Синтаксис и операторы
Выражение 2 ** 3 ** 2 в PHP вычисляется как (2 ** 3) ** 2, то есть 64.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Выражение 2 ** 3 ** 2 в PHP вычисляется как (2 ** 3) ** 2, то есть 64.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
60
T01-L8 · Синтаксис и операторы
Какую строку выведет: echo 'сумма: ' . 2 + 3; (PHP 8)?
Верный ответ: сумма: 5
run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓
Какую строку выведет: echo 'сумма: ' . 2 + 3; (PHP 8)?
Верный ответ: сумма: 5
run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓
20
T01-L9 · Синтаксис и операторы
Что выведет этот код? ```php echo intdiv(7, 2) . intdiv(-7, 2); ```
Верный ответ: 3-3
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✓
Что выведет этот код? ```php echo intdiv(7, 2) . intdiv(-7, 2); ```
Верный ответ: 3-3
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✓
80
T01-L10 · Синтаксис и операторы
Что выведет этот код? ```php echo -3 ** 2; ```
Верный ответ: -9
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```php echo -3 ** 2; ```
Верный ответ: -9
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
80.0%
Типы и сравнения
100
T02-L1 · Типы и сравнения
Массивы при строгом сравнении === считаются равными независимо от порядка элементов.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Массивы при строгом сравнении === считаются равными независимо от порядка элементов.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T02-L2 · Типы и сравнения
Сравнение 0 == false возвращает false, потому что это строгое сравнение.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Сравнение 0 == false возвращает false, потому что это строгое сравнение.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
40
T02-L3 · Типы и сравнения
В PHP 8 выражение "abc" == 0 возвращает true.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗
В PHP 8 выражение "abc" == 0 возвращает true.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗
100
T02-L4 · Типы и сравнения
Значение null при нестрогом сравнении равно одновременно 0, пустой строке и false.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Значение null при нестрогом сравнении равно одновременно 0, пустой строке и false.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T02-L5 · Типы и сравнения
Что вернёт выражение: (int) '42abc'?
Верный ответ: 42
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что вернёт выражение: (int) '42abc'?
Верный ответ: 42
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T02-L6 · Типы и сравнения
Что вернёт выражение: '5' + 5?
Верный ответ: 10
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что вернёт выражение: '5' + 5?
Верный ответ: 10
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T02-L7 · Типы и сравнения
При приведении к строке значение false превращается в "0".
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
При приведении к строке значение false превращается в "0".
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T02-L8 · Типы и сравнения
Сравнение 0.1 + 0.2 === 0.3 возвращает false.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Сравнение 0.1 + 0.2 === 0.3 возвращает false.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
T02-L9 · Типы и сравнения
Что выведет этот код? ```php echo '1e1' == '10' ? 'true' : 'false'; ```
Верный ответ: true
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```php echo '1e1' == '10' ? 'true' : 'false'; ```
Верный ответ: true
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T02-L10 · Типы и сравнения
Что выведет этот код? ```php switch ('a') { case 0: echo 'zero'; break; default: echo 'other'; } ```
Верный ответ: other
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```php switch ('a') { case 0: echo 'zero'; break; default: echo 'other'; } ```
Верный ответ: other
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
92.0%
Строки
100
T03-L1 · Строки
strrev() корректно переворачивает строку в UTF-8.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
strrev() корректно переворачивает строку в UTF-8.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T03-L2 · Строки
str_contains('Hello world', 'world') возвращает true.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
str_contains('Hello world', 'world') возвращает true.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T03-L3 · Строки
str_pad() умеет дополнять строку только справа.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
str_pad() умеет дополнять строку только справа.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T03-L4 · Строки
По умолчанию trim() срезает только пробелы, не трогая табы и переводы строк.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
По умолчанию trim() срезает только пробелы, не трогая табы и переводы строк.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T03-L5 · Строки
Сколько БАЙТ вернёт strlen('привет') для строки в UTF-8?
Верный ответ: 12
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Сколько БАЙТ вернёт strlen('привет') для строки в UTF-8?
Верный ответ: 12
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T03-L6 · Строки
Что вернёт substr('abcdef', -3)?
Верный ответ: def
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что вернёт substr('abcdef', -3)?
Верный ответ: def
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T03-L7 · Строки
ucfirst() изменяет строку, переданную ей, на месте.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
ucfirst() изменяет строку, переданную ей, на месте.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T03-L8 · Строки
В heredoc работают интерполяция переменных, а в nowdoc — нет.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
В heredoc работают интерполяция переменных, а в nowdoc — нет.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
0
T03-L9 · Строки
Что выведет этот код? ```php echo strtr('abc', ['a' => '1', 'ab' => '2']); ```
Верный ответ: 2c
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
Что выведет этот код? ```php echo strtr('abc', ['a' => '1', 'ab' => '2']); ```
Верный ответ: 2c
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
100
T03-L10 · Строки
Что выведет этот код? ```php echo '[' . substr('hello', -10) . ']'; ```
Верный ответ: [hello]
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```php echo '[' . substr('hello', -10) . ']'; ```
Верный ответ: [hello]
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
90.0%
Массивы
100
T04-L1 · Массивы
Функция sort() сохраняет связь ключей и значений массива.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Функция sort() сохраняет связь ключей и значений массива.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T04-L2 · Массивы
Строковый ключ '5' в массиве сохраняется как целое число 5.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Строковый ключ '5' в массиве сохраняется как целое число 5.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T04-L3 · Массивы
Функция in_array() по умолчанию использует строгое сравнение (===).
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Функция in_array() по умолчанию использует строгое сравнение (===).
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T04-L4 · Массивы
array_filter() без колбэка удаляет из массива все «пустые» (falsy) элементы.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
array_filter() без колбэка удаляет из массива все «пустые» (falsy) элементы.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
60
T04-L5 · Массивы
Функция array_slice() по умолчанию сохраняет исходные числовые ключи массива.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✗
Функция array_slice() по умолчанию сохраняет исходные числовые ключи массива.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✗
80
T04-L6 · Массивы
Что вернёт array_slice([10, 20, 30, 40], 1, 2)?
Верный ответ: [20,30]
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗
Что вернёт array_slice([10, 20, 30, 40], 1, 2)?
Верный ответ: [20,30]
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗
100
T04-L7 · Массивы
Сколько элементов будет в count(['a' => 1] + ['a' => 9, 'b' => 2])?
Верный ответ: 2
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Сколько элементов будет в count(['a' => 1] + ['a' => 9, 'b' => 2])?
Верный ответ: 2
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
60
T04-L8 · Массивы
Spread-оператор [...$a, ...$b] с PHP 8.1 поддерживает массивы со строковыми ключами.
Верный ответ: да
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✓
Spread-оператор [...$a, ...$b] с PHP 8.1 поддерживает массивы со строковыми ключами.
Верный ответ: да
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✓
100
T04-L9 · Массивы
Что выведет этот код? ```php $a = ['k' => 1, 'n' => 2]; $b = ['k' => 9, 'm' => 3]; echo implode(',', array_keys($a + $b)); ```
Верный ответ: k,n,m
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```php $a = ['k' => 1, 'n' => 2]; $b = ['k' => 9, 'm' => 3]; echo implode(',', array_keys($a + $b)); ```
Верный ответ: k,n,m
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
Что выведет этот код? ```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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
80.0%
Функции и замыкания
40
T05-L1 · Функции и замыкания
Именованные аргументы нельзя комбинировать с распаковкой массива ...$args в одном вызове.
Верный ответ: нет
run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✗
Именованные аргументы нельзя комбинировать с распаковкой массива ...$args в одном вызове.
Верный ответ: нет
run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✗
100
T05-L2 · Функции и замыкания
Анонимная функция без use видит переменные внешней области видимости.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Анонимная функция без use видит переменные внешней области видимости.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T05-L3 · Функции и замыкания
Что вернёт func_num_args() внутри function f($a) { return func_num_args(); } при вызове f(1, 2, 3)?
Верный ответ: 3
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что вернёт func_num_args() внутри function f($a) { return func_num_args(); } при вызове f(1, 2, 3)?
Верный ответ: 3
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T05-L4 · Функции и замыкания
Тело стрелочной функции fn может состоять из нескольких выражений в фигурных скобках.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Тело стрелочной функции fn может состоять из нескольких выражений в фигурных скобках.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T05-L5 · Функции и замыкания
Стрелочная функция fn захватывает внешние переменные по ссылке (лениво, при использовании).
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Стрелочная функция fn захватывает внешние переменные по ссылке (лениво, при использовании).
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T05-L6 · Функции и замыкания
Замыкание, объявленное как static function () {}, не захватывает $this.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Замыкание, объявленное как static function () {}, не захватывает $this.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T05-L7 · Функции и замыкания
Что выведет: $x = 5; $f = function () use ($x) { return $x; }; $x = 7; echo $f();
Верный ответ: 5
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет: $x = 5; $f = function () use ($x) { return $x; }; $x = 7; echo $f();
Верный ответ: 5
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T05-L8 · Функции и замыкания
В «слабом» режиме типизации (без strict_types) передача строки "5" в параметр с типом int допустима.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
В «слабом» режиме типизации (без strict_types) передача строки "5" в параметр с типом int допустима.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
60
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-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓
Что выведет этот код? ```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-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓
100
T05-L10 · Функции и замыкания
Что выведет этот код? ```php function f(int $a, int $b): int { return $a - $b; } echo f(...['b' => 1, 'a' => 5]); ```
Верный ответ: 4
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```php function f(int $a, int $b): int { return $a - $b; } echo f(...['b' => 1, 'a' => 5]); ```
Верный ответ: 4
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
90.0%
ООП: классы и наследование
100
T06-L1 · ООП: классы и наследование
PHP поддерживает promotion свойств в конструкторе: public function __construct(private int $x) {}.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
PHP поддерживает promotion свойств в конструкторе: public function __construct(private int $x) {}.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T06-L2 · ООП: классы и наследование
Какое ключевое слово запрещает переопределять метод в подклассах?
Верный ответ: final
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какое ключевое слово запрещает переопределять метод в подклассах?
Верный ответ: final
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T06-L3 · ООП: классы и наследование
Метод, объявленный как final, нельзя переопределить в подклассе.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Метод, объявленный как final, нельзя переопределить в подклассе.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T06-L4 · ООП: классы и наследование
Свойства родителя с видимостью private доступны в подклассе.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Свойства родителя с видимостью private доступны в подклассе.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T06-L5 · ООП: классы и наследование
Что вернёт get_class(new class {})? Ответь частью имени до нулевого байта (без пути к файлу).
Верный ответ: class@anonymous
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что вернёт get_class(new class {})? Ответь частью имени до нулевого байта (без пути к файлу).
Верный ответ: class@anonymous
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T06-L6 · ООП: классы и наследование
private-метод родителя не входит в контракт наследования: потомок может объявить метод с тем же именем с любой видимостью.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
private-метод родителя не входит в контракт наследования: потомок может объявить метод с тем же именем с любой видимостью.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
T06-L7 · ООП: классы и наследование
Магический метод __get() вызывается только для несуществующих свойств.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓
Магический метод __get() вызывается только для несуществующих свойств.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T06-L8 · ООП: классы и наследование
Что бросит повторное присваивание readonly-свойства — Exception или Error?
Верный ответ: error
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что бросит повторное присваивание readonly-свойства — Exception или Error?
Верный ответ: error
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T06-L9 · ООП: классы и наследование
Что выведет этот код? ```php class A { public function who(): string { return static::class; } } class B extends A {} echo (new B)->who(); ```
Верный ответ: b
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```php class A { public function who(): string { return static::class; } } class B extends A {} echo (new B)->who(); ```
Верный ответ: b
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код на 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
98.0%
Интерфейсы, трейты, enum
100
T07-L1 · Интерфейсы, трейты, enum
Интерфейс может объявлять константы.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Интерфейс может объявлять константы.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T07-L2 · Интерфейсы, трейты, enum
Какой оператор проверяет, что объект реализует класс или интерфейс?
Верный ответ: instanceof
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какой оператор проверяет, что объект реализует класс или интерфейс?
Верный ответ: instanceof
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
T07-L3 · Интерфейсы, трейты, enum
Интерфейс может объявлять статические методы.
Верный ответ: да
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓
Интерфейс может объявлять статические методы.
Верный ответ: да
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T07-L4 · Интерфейсы, трейты, enum
Оператор instanceof проверяет только наследование классов: интерфейсы он не учитывает.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Оператор instanceof проверяет только наследование классов: интерфейсы он не учитывает.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
T07-L5 · Интерфейсы, трейты, enum
Метод интерфейса может иметь реализацию по умолчанию, как метод трейта.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓
Метод интерфейса может иметь реализацию по умолчанию, как метод трейта.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T07-L6 · Интерфейсы, трейты, enum
Абстрактный метод в абстрактном классе может иметь видимость protected.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Абстрактный метод в абстрактном классе может иметь видимость protected.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T07-L7 · Интерфейсы, трейты, enum
Сколько элементов вернёт Foo::cases() для enum Foo { case A; case B; case C; }?
Верный ответ: 3
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Сколько элементов вернёт Foo::cases() для enum Foo { case A; case B; case C; }?
Верный ответ: 3
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T07-L8 · Интерфейсы, трейты, enum
Трейт может объявлять константы.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Трейт может объявлять константы.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗
Что выведет этот код? ```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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗
100
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```php trait Counter { public static int $n = 0; } class CX { use Counter; } class CY { use Counter; } CX::$n = 1; echo CY::$n; ```
Верный ответ: 0
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
94.0%
Исключения и ошибки
100
T08-L1 · Исключения и ошибки
Интерфейс Throwable — общий предок и для Exception, и для Error.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Интерфейс Throwable — общий предок и для Exception, и для Error.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T08-L2 · Исключения и ошибки
Блок catch (Exception $e) перехватит и TypeError, потому что TypeError в итоге наследуется от Exception.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Блок catch (Exception $e) перехватит и TypeError, потому что TypeError в итоге наследуется от Exception.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T08-L3 · Исключения и ошибки
Оператор @ подавляет и исключения тоже.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Оператор @ подавляет и исключения тоже.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T08-L4 · Исключения и ошибки
Какой класс ошибки бросит intdiv(5, 0)?
Верный ответ: divisionbyzeroerror
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какой класс ошибки бросит intdiv(5, 0)?
Верный ответ: divisionbyzeroerror
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T08-L5 · Исключения и ошибки
Блок finally выполняется только если исключение было поймано блоком catch.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Блок finally выполняется только если исключение было поймано блоком catch.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T08-L6 · Исключения и ошибки
Исключение, выброшенное внутри блока finally, никак не влияет на результат try-блока.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Исключение, выброшенное внутри блока finally, никак не влияет на результат try-блока.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T08-L7 · Исключения и ошибки
Что вернёт выражение: (bool) new Exception('x')?
Верный ответ: true
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что вернёт выражение: (bool) new Exception('x')?
Верный ответ: true
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T08-L8 · Исключения и ошибки
Функции, зарегистрированные через register_shutdown_function(), выполняются при вызове exit.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Функции, зарегистрированные через register_shutdown_function(), выполняются при вызове exit.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T08-L9 · Исключения и ошибки
Что выведет этот код? ```php try { try { throw new RuntimeException('first'); } finally { throw new LogicException('second'); } } catch (LogicException $e) { echo $e->getMessage(); } ```
Верный ответ: second
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```php try { try { throw new RuntimeException('first'); } finally { throw new LogicException('second'); } } catch (LogicException $e) { echo $e->getMessage(); } ```
Верный ответ: second
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T08-L10 · Исключения и ошибки
Что выведет этот код? ```php function f(): int { try { return 1; } finally { return 2; } } echo f(); ```
Верный ответ: 2
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```php function f(): int { try { return 1; } finally { return 2; } } echo f(); ```
Верный ответ: 2
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100.0%
Пространства имён и автозагрузка
100
T09-L1 · Пространства имён и автозагрузка
Директива use App\Service\Mailer; сама по себе подключает файл с классом.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Директива use App\Service\Mailer; сама по себе подключает файл с классом.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T09-L2 · Пространства имён и автозагрузка
Что пишут после use, чтобы импортировать функцию (а не класс): слово function или const?
Верный ответ: function
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что пишут после use, чтобы импортировать функцию (а не класс): слово function или const?
Верный ответ: function
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T09-L3 · Пространства имён и автозагрузка
В какой файл (путь от src/) PSR-4 «App\ → src/» положит класс App\Controller\Api\UserController?
Верный ответ: src/controller/api/usercontroller.php
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
В какой файл (путь от src/) PSR-4 «App\ → src/» положит класс App\Controller\Api\UserController?
Верный ответ: src/controller/api/usercontroller.php
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T09-L4 · Пространства имён и автозагрузка
Подключение vendor/autoload.php регистрирует обработчики через spl_autoload_register().
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Подключение vendor/autoload.php регистрирует обработчики через spl_autoload_register().
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T09-L5 · Пространства имён и автозагрузка
Магическая константа __NAMESPACE__ содержит имя текущего пространства имён.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Магическая константа __NAMESPACE__ содержит имя текущего пространства имён.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T09-L6 · Пространства имён и автозагрузка
Относительное имя класса (без ведущего \) в new резолвится от глобального корня.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Относительное имя класса (без ведущего \) в new резолвится от глобального корня.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T09-L7 · Пространства имён и автозагрузка
При маппинге PSR-4 «App\ → src/» класс App\Model\User лежит в файле src/Model/User.php.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
При маппинге PSR-4 «App\ → src/» класс App\Model\User лежит в файле src/Model/User.php.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
T09-L8 · Пространства имён и автозагрузка
Директиву use можно писать внутри тела функции — импорт будет действовать для этой функции.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗
Директиву use можно писать внутри тела функции — импорт будет действовать для этой функции.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗
40
T09-L9 · Пространства имён и автозагрузка
Что выведет этот код? ```php namespace N; use App\Foo as Baz; echo Baz::class . '|' . \Baz::class; ```
Верный ответ: app\foo|baz
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```php namespace N; use App\Foo as Baz; echo Baz::class . '|' . \Baz::class; ```
Верный ответ: app\foo|baz
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓
80
T09-L10 · Пространства имён и автозагрузка
Что выведет этот код? ```php namespace Ns; class Foo {} $c = 'Foo'; echo (class_exists($c) ? 'yes' : 'no') . (class_exists(__NAMESPACE__ . '\\' . $c) ? 'yes' : 'no'); ```
Верный ответ: noyes
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```php namespace Ns; class Foo {} $c = 'Foo'; echo (class_exists($c) ? 'yes' : 'no') . (class_exists(__NAMESPACE__ . '\\' . $c) ? 'yes' : 'no'); ```
Верный ответ: noyes
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
90.0%
Ссылки и область видимости
100
T10-L1 · Ссылки и область видимости
Массивы при присваивании копируются, а не передаются по ссылке.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Массивы при присваивании копируются, а не передаются по ссылке.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T10-L2 · Ссылки и область видимости
Что выведет: $a = [1, 2]; $b = $a; $b[] = 3; echo count($a);
Верный ответ: 2
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет: $a = [1, 2]; $b = $a; $b[] = 3; echo count($a);
Верный ответ: 2
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T10-L3 · Ссылки и область видимости
Внутри функции пользовательские переменные глобальной области недоступны без global, $GLOBALS или передачи параметром.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Внутри функции пользовательские переменные глобальной области недоступны без global, $GLOBALS или передачи параметром.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
T10-L4 · Ссылки и область видимости
unset($GLOBALS['x']) внутри функции удаляет глобальную переменную только для этой функции.
Верный ответ: нет
run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
unset($GLOBALS['x']) внутри функции удаляет глобальную переменную только для этой функции.
Верный ответ: нет
run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T10-L5 · Ссылки и область видимости
Что выведет: function inc(&$x) { $x++; } $n = 5; inc($n); echo $n;
Верный ответ: 6
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет: function inc(&$x) { $x++; } $n = 5; inc($n); echo $n;
Верный ответ: 6
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
60
T10-L6 · Ссылки и область видимости
Foreach по массиву (по значению) работает с «живым» массивом: изменения массива внутри цикла видны в этом же проходе.
Верный ответ: нет
run-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓
Foreach по массиву (по значению) работает с «живым» массивом: изменения массива внутри цикла видны в этом же проходе.
Верный ответ: нет
run-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T10-L7 · Ссылки и область видимости
Статическое свойство класса у каждого экземпляра своё: изменения в одном объекте не видны в других.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Статическое свойство класса у каждого экземпляра своё: изменения в одном объекте не видны в других.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T10-L8 · Ссылки и область видимости
Массив может иметь булев ключ true, и он сохранится как bool.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Массив может иметь булев ключ true, и он сохранится как bool.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T10-L9 · Ссылки и область видимости
Что выведет этот код? ```php $a = [1, 2, 3]; foreach ($a as &$v) {} $v = 99; echo implode(',', $a); ```
Верный ответ: 1,2,99
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```php $a = [1, 2, 3]; foreach ($a as &$v) {} $v = 99; echo implode(',', $a); ```
Верный ответ: 1,2,99
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
40
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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓
88.0%
Генераторы, итераторы, SPL
100
T11-L1 · Генераторы, итераторы, SPL
Внутри генератора можно использовать return со значением, и оно попадёт в $gen->getReturn().
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Внутри генератора можно использовать return со значением, и оно попадёт в $gen->getReturn().
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
40
T11-L2 · Генераторы, итераторы, SPL
Полностью пройденный генератор можно «перемотать» через rewind() и пройти снова.
Верный ответ: нет
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓
Полностью пройденный генератор можно «перемотать» через rewind() и пройти снова.
Верный ответ: нет
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓
100
T11-L3 · Генераторы, итераторы, SPL
Конструкция yield from делегирует проход другому генератору или итерируемому объекту.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Конструкция yield from делегирует проход другому генератору или итерируемому объекту.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T11-L4 · Генераторы, итераторы, SPL
Что вернёт get_class(g()) для function g() { yield 1; }?
Верный ответ: generator
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что вернёт get_class(g()) для function g() { yield 1; }?
Верный ответ: generator
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T11-L5 · Генераторы, итераторы, SPL
Сколько элементов вернёт count(iterator_to_array((function () { yield from [1, 2, 3]; })()));
Верный ответ: 3
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Сколько элементов вернёт count(iterator_to_array((function () { yield from [1, 2, 3]; })()));
Верный ответ: 3
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T11-L6 · Генераторы, итераторы, SPL
Класс SplStack реализует очередь FIFO.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Класс SplStack реализует очередь FIFO.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T11-L7 · Генераторы, итераторы, SPL
ArrayIterator позволяет обернуть массив и обходить его через интерфейс Iterator.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
ArrayIterator позволяет обернуть массив и обходить его через интерфейс Iterator.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
T11-L8 · Генераторы, итераторы, SPL
Объект класса ArrayObject нельзя обойти через foreach.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓
Объект класса ArrayObject нельзя обойти через foreach.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓
20
T11-L9 · Генераторы, итераторы, SPL
Что выведет этот код? ```php function g(): Generator { $x = yield 1; return $x + 1; } $g = g(); $g->send(10); echo $g->getReturn(); ```
Верный ответ: 11
run-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✗
Что выведет этот код? ```php function g(): Generator { $x = yield 1; return $x + 1; } $g = g(); $g->send(10); echo $g->getReturn(); ```
Верный ответ: 11
run-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✗
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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
Что выведет этот код? ```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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
74.0%
Конфигурация и безопасность
100
T12-L1 · Конфигурация и безопасность
password_hash() генерирует соль автоматически — передавать её отдельно не нужно.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
password_hash() генерирует соль автоматически — передавать её отдельно не нужно.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T12-L2 · Конфигурация и безопасность
Алгоритм PASSWORD_DEFAULT в PHP 8 — это md5 с автоматически добавленной солью.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Алгоритм PASSWORD_DEFAULT в PHP 8 — это md5 с автоматически добавленной солью.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T12-L3 · Конфигурация и безопасность
Что вернёт password_verify('secret', password_hash('secret', PASSWORD_DEFAULT))?
Верный ответ: true
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что вернёт password_verify('secret', password_hash('secret', PASSWORD_DEFAULT))?
Верный ответ: true
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T12-L4 · Конфигурация и безопасность
Функция strip_tags() защищает от SQL-инъекций.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Функция strip_tags() защищает от SQL-инъекций.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T12-L5 · Конфигурация и безопасность
Функция session_regenerate_id() используется для защиты от фиксации сессии при входе пользователя.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Функция session_regenerate_id() используется для защиты от фиксации сессии при входе пользователя.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T12-L6 · Конфигурация и безопасность
Какая встроенная функция возвращает имя SAPI (например, cli)?
Верный ответ: php_sapi_name
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какая встроенная функция возвращает имя SAPI (например, cli)?
Верный ответ: php_sapi_name
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T12-L7 · Конфигурация и безопасность
session_destroy() удаляет данные сессии на сервере, но не cookie в браузере пользователя.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
session_destroy() удаляет данные сессии на сервере, но не cookie в браузере пользователя.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T12-L8 · Конфигурация и безопасность
Без вызова session_start() массив $_SESSION автоматически загружается данными сессии.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Без вызова session_start() массив $_SESSION автоматически загружается данными сессии.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
40
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-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓
Что выведет этот код? ```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-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓
20
T12-L10 · Конфигурация и безопасность
Что выведет этот код на PHP 8.5? ```php echo (E_ALL & 2048) === 0 ? 'strict-out' : 'strict-in'; ```
Верный ответ: strict-out
run-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✗
Что выведет этот код на PHP 8.5? ```php echo (E_ALL & 2048) === 0 ? 'strict-out' : 'strict-in'; ```
Верный ответ: strict-out
run-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✗
86.0%
PHP 8.4–8.5
20
VC-L1 · PHP 8.4–8.5
В какой версии PHP появилась функция array_find()?
Верный ответ: 8.4
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
В какой версии PHP появилась функция array_find()?
Верный ответ: 8.4
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
100
VC-L2 · PHP 8.4–8.5
Property hooks (get/set прямо в объявлении свойства) вошли в PHP 8.4.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Property hooks (get/set прямо в объявлении свойства) вошли в PHP 8.4.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
VC-L3 · PHP 8.4–8.5
Асимметричная видимость (public private(set) string $name) появилась в PHP 8.4.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Асимметричная видимость (public private(set) string $name) появилась в PHP 8.4.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
0
VC-L4 · PHP 8.4–8.5
В какой версии PHP впервые появился атрибут #[\NoDiscard]? Ответь номером версии.
Верный ответ: 8.5
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
В какой версии PHP впервые появился атрибут #[\NoDiscard]? Ответь номером версии.
Верный ответ: 8.5
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
0
VC-L5 · PHP 8.4–8.5
В какой версии PHP впервые появился оператор конвейера |> (pipe)? Ответь номером версии.
Верный ответ: 8.5
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
В какой версии PHP впервые появился оператор конвейера |> (pipe)? Ответь номером версии.
Верный ответ: 8.5
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
0
VC-L6 · PHP 8.4–8.5
В какой версии PHP появился clone-with — синтаксис clone($obj, ['x' => 1])? Ответь номером версии.
Верный ответ: 8.5
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
В какой версии PHP появился clone-with — синтаксис clone($obj, ['x' => 1])? Ответь номером версии.
Верный ответ: 8.5
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
0
VC-L7 · PHP 8.4–8.5
В какой версии PHP появились функции array_first() и array_last()?
Верный ответ: 8.5
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
В какой версии PHP появились функции array_first() и array_last()?
Верный ответ: 8.5
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
0
VC-L8 · PHP 8.4–8.5
Для какой версии PHP был принят RFC Partial Function Application v2 (по состоянию на 07.11.2026)? Ответь номером версии.
Верный ответ: 8.6
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
Для какой версии PHP был принят RFC Partial Function Application v2 (по состоянию на 07.11.2026)? Ответь номером версии.
Верный ответ: 8.6
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код на PHP 8.5? ```php class C { public function hi(): string { return 'hi'; } } echo new C()->hi(); ```
Верный ответ: hi
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
20
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-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✗
Что выведет этот код на 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-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✗
34.0%
PHP: 8.6+ и будущее
0
VF-L1 · PHP: 8.6+ и будущее
Для какой версии PHP реализован RFC clamp_v2 (функция clamp()) по состоянию на 07.11.2026? Ответь номером версии.
Верный ответ: 8.6
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
Для какой версии PHP реализован RFC clamp_v2 (функция clamp()) по состоянию на 07.11.2026? Ответь номером версии.
Верный ответ: 8.6
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
40
VF-L2 · PHP: 8.6+ и будущее
RFC Context Managers v2 уже принят в PHP (на 07.11.2026).
Верный ответ: нет
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓
RFC Context Managers v2 уже принят в PHP (на 07.11.2026).
Верный ответ: нет
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓
80
VF-L3 · PHP: 8.6+ и будущее
RFC Bound-Erased Generic Types (generics) был отклонён в 2026 году.
Верный ответ: да
run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
RFC Bound-Erased Generic Types (generics) был отклонён в 2026 году.
Верный ответ: да
run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
VF-L4 · PHP: 8.6+ и будущее
На 07.11.2026 RFC о включении многопоточности (ZTS) по умолчанию уже принят в PHP.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
На 07.11.2026 RFC о включении многопоточности (ZTS) по умолчанию уже принят в PHP.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
VF-L5 · PHP: 8.6+ и будущее
В PHP 8.5 дженериков (параметризованных типов) по-прежнему нет.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
В PHP 8.5 дженериков (параметризованных типов) по-прежнему нет.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
0
VF-L6 · PHP: 8.6+ и будущее
На 07.11.2026 последняя стабильная версия PHP — 8.5, а PHP 8.6 ещё не выпущена (GA — 19.11.2026).
Верный ответ: да
run-04: ✗ · run-08: ⬜ · run-14: ✗ · run-20: ✗ · run-26: ✗
На 07.11.2026 последняя стабильная версия PHP — 8.5, а PHP 8.6 ещё не выпущена (GA — 19.11.2026).
Верный ответ: да
run-04: ✗ · run-08: ⬜ · run-14: ✗ · run-20: ✗ · run-26: ✗
100
VF-L7 · PHP: 8.6+ и будущее
Ветка PHP 6 так и не вышла: после PHP 5.6 вышел сразу PHP 7.0.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Ветка PHP 6 так и не вышла: после PHP 5.6 вышел сразу PHP 7.0.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
60
VF-L8 · PHP: 8.6+ и будущее
RFC о добавлении атрибута #[\Deprecated] в ядро был принят.
Верный ответ: да
run-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
RFC о добавлении атрибута #[\Deprecated] в ядро был принят.
Верный ответ: да
run-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
60.0%
Чистая архитектура
100
T25-L1 · Чистая архитектура
Правило зависимостей в чистой и луковичной архитектурах: внутренние слои не знают о внешних — зависимости направлены к центру.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Правило зависимостей в чистой и луковичной архитектурах: внутренние слои не знают о внешних — зависимости направлены к центру.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T25-L2 · Чистая архитектура
Сущности домена не импортируют ни Doctrine, ни Symfony — только язык и, возможно, стандартную библиотеку.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Сущности домена не импортируют ни Doctrine, ни Symfony — только язык и, возможно, стандартную библиотеку.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T25-L3 · Чистая архитектура
Контроллеры и Twig-шаблоны относятся к слою бизнес-логики, потому что именно они вызывают use cases.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Контроллеры и Twig-шаблоны относятся к слою бизнес-логики, потому что именно они вызывают use cases.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
0
T25-L4 · Чистая архитектура
Что находится в самом центре луковичной архитектуры?
Верный ответ: доменная модель
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
Что находится в самом центре луковичной архитектуры?
Верный ответ: доменная модель
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
100
T25-L5 · Чистая архитектура
Нарушение границ слоёв можно поймать автоматикой: анализатор зависимостей между слоями (например, deptrac) падает на запрещённом вызове.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Нарушение границ слоёв можно поймать автоматикой: анализатор зависимостей между слоями (например, deptrac) падает на запрещённом вызове.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T25-L6 · Чистая архитектура
Use case (interactor) может принимать HTTP-запрос или EntityManager как аргументы — так проще.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Use case (interactor) может принимать HTTP-запрос или EntityManager как аргументы — так проще.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T25-L7 · Чистая архитектура
Как называется компонент, предоставляющий коллекцию агрегатов/сущностей, скрывая механизм хранения за интерфейсом?
Верный ответ: репозиторий
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Как называется компонент, предоставляющий коллекцию агрегатов/сущностей, скрывая механизм хранения за интерфейсом?
Верный ответ: репозиторий
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T25-L8 · Чистая архитектура
Замена PostgreSQL на другую БД в чистой архитектуре затрагивает только внешний слой — домен и use cases не меняются.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Замена PostgreSQL на другую БД в чистой архитектуре затрагивает только внешний слой — домен и use cases не меняются.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Слои: 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
60
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-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓
Слои: 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-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓
86.0%
DDD
100
T26-L1 · DDD
Агрегат в DDD — это просто другое название таблицы базы данных.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Агрегат в DDD — это просто другое название таблицы базы данных.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T26-L2 · DDD
Value Object неизменяем и сравнивается по значениям полей, а не по идентификатору.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Value Object неизменяем и сравнивается по значениям полей, а не по идентификатору.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
60
T26-L3 · DDD
Как называется единственная точка внешнего входа в агрегат, через которую проходят все изменения?
Верный ответ: aggregate root
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓
Как называется единственная точка внешнего входа в агрегат, через которую проходят все изменения?
Верный ответ: aggregate root
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓
100
T26-L4 · DDD
В DDD репозиторий объявляется на агрегат (его корень), а не на каждую сущность.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
В DDD репозиторий объявляется на агрегат (его корень), а не на каждую сущность.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T26-L5 · DDD
Ubiquitous language — единый язык модели, общий для разработчиков и предметных экспертов.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Ubiquitous language — единый язык модели, общий для разработчиков и предметных экспертов.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
0
T26-L6 · DDD
Как называется граница, внутри которой модель и её язык едины, а снаружи те же понятия — другие модели?
Верный ответ: bounded context
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
Как называется граница, внутри которой модель и её язык едины, а снаружи те же понятия — другие модели?
Верный ответ: bounded context
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
100
T26-L7 · DDD
Анемичная модель (объекты только с геттерами/сеттерами, логика в сервисах) — рекомендуемый стиль DDD.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Анемичная модель (объекты только с геттерами/сеттерами, логика в сервисах) — рекомендуемый стиль DDD.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T26-L8 · DDD
Bounded context означает, что у каждого контекста своя модель: одно и то же понятие в разных контекстах — разные классы.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Bounded context означает, что у каждого контекста своя модель: одно и то же понятие в разных контекстах — разные классы.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
86.0%
Symfony
100
T13-L1 · Symfony
Сервисы в DI-контейнере Symfony по умолчанию создаются лениво — при первом обращении к ним.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Сервисы в DI-контейнере Symfony по умолчанию создаются лениво — при первом обращении к ним.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T13-L2 · Symfony
Какая консольная команда Symfony выводит список всех зарегистрированных маршрутов?
Верный ответ: debug:router
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какая консольная команда Symfony выводит список всех зарегистрированных маршрутов?
Верный ответ: debug:router
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T13-L3 · Symfony
Autowiring в Symfony требует вручную перечислять каждый сервис в конфигурации services.yaml.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Autowiring в Symfony требует вручную перечислять каждый сервис в конфигурации services.yaml.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T13-L4 · Symfony
Twig-шаблоны компилируются в PHP-классы и кэшируются между запросами.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Twig-шаблоны компилируются в PHP-классы и кэшируются между запросами.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T13-L5 · Symfony
Контейнер DI в dev-окружении Symfony пересобирается только после изменения отслеживаемых файлов, а не при каждом запросе.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Контейнер DI в dev-окружении Symfony пересобирается только после изменения отслеживаемых файлов, а не при каждом запросе.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T13-L6 · Symfony
Какая переменная окружения выбирает активное окружение Symfony (dev/prod)?
Верный ответ: app_env
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какая переменная окружения выбирает активное окружение Symfony (dev/prod)?
Верный ответ: app_env
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T13-L7 · Symfony
Метод контроллера может быть private — маршрутизация Symfony работает с любыми методами класса.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Метод контроллера может быть private — маршрутизация Symfony работает с любыми методами класса.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T13-L8 · Symfony
Подписчики событий (EventSubscriber) всегда получают события раньше слушателей (listeners), потому что интерфейс даёт им приоритет.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Подписчики событий (EventSubscriber) всегда получают события раньше слушателей (listeners), потому что интерфейс даёт им приоритет.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
20
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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗
Что выведет этот код? ```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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗
92.0%
Symfony: Security и формы
80
T22-L1 · Symfony: Security и формы
В современном Symfony (6.0+) аутентификация строится на классах-authenticator (AuthenticatorInterface); прежняя система guard удалена.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓
В современном Symfony (6.0+) аутентификация строится на классах-authenticator (AuthenticatorInterface); прежняя система guard удалена.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓
100
T22-L2 · Symfony: Security и формы
Какой атрибут Symfony проверяет роль/право прямо на методе контроллера (без него — 403)?
Верный ответ: isgranted
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какой атрибут Symfony проверяет роль/право прямо на методе контроллера (без него — 403)?
Верный ответ: isgranted
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
T22-L3 · Symfony: Security и формы
Voters (голосующие) — механизм Symfony для проверки доступа к конкретному объекту: isGranted('EDIT', $post).
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
Voters (голосующие) — механизм Symfony для проверки доступа к конкретному объекту: isGranted('EDIT', $post).
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
20
T22-L4 · Symfony: Security и формы
Ограничения валидации в современных Symfony (7+) объявляются PHP-атрибутами (#[Assert\NotBlank]); аннотации-докблоки больше не поддерживаются.
Верный ответ: да
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗
Ограничения валидации в современных Symfony (7+) объявляются PHP-атрибутами (#[Assert\NotBlank]); аннотации-докблоки больше не поддерживаются.
Верный ответ: да
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗
100
T22-L5 · Symfony: Security и формы
CSRF-защита форм в Symfony включена по умолчанию: форма проверяет токен при отправке.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
CSRF-защита форм в Symfony включена по умолчанию: форма проверяет токен при отправке.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T22-L6 · Symfony: Security и формы
Валидация формы в Symfony выполняется на сервере, даже если клиентская (HTML5) проверка прошла.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Валидация формы в Symfony выполняется на сервере, даже если клиентская (HTML5) проверка прошла.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T22-L7 · Symfony: Security и формы
Какая команда Symfony maker генерирует класс формы (FormType)?
Верный ответ: make:form
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какая команда Symfony maker генерирует класс формы (FormType)?
Верный ответ: make:form
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T22-L8 · Symfony: Security и формы
Symfony хранит пароль пользователя в сессии в открытом виде (plaintext).
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Symfony хранит пароль пользователя в сессии в открытом виде (plaintext).
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
20
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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗
Что выведет этот код? ```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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗
20
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-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✗
Что выведет этот код? ```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-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✗
72.0%
Symfony: конфигурация и сервисы
100
T23-L1 · Symfony: конфигурация и сервисы
Конфигурация бандлов Symfony лежит в config/packages — по одному файлу на бандл или тему.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Конфигурация бандлов Symfony лежит в config/packages — по одному файлу на бандл или тему.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T23-L2 · Symfony: конфигурация и сервисы
Файл .env с dev-дефолтами коммитится в репозиторий, а настоящие секреты живут в некоммитимом .env.local.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Файл .env с dev-дефолтами коммитится в репозиторий, а настоящие секреты живут в некоммитимом .env.local.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
60
T23-L3 · Symfony: конфигурация и сервисы
Какая команда Symfony выводит зарегистрированные сервисы контейнера и их алиасы?
Верный ответ: debug:container
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓
Какая команда Symfony выводит зарегистрированные сервисы контейнера и их алиасы?
Верный ответ: debug:container
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓
80
T23-L4 · Symfony: конфигурация и сервисы
Контейнер Symfony позволяет менять параметры в рантайме: $container->setParameter() работает из контроллера.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓
Контейнер Symfony позволяет менять параметры в рантайме: $container->setParameter() работает из контроллера.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T23-L5 · Symfony: конфигурация и сервисы
По умолчанию сервисы в Symfony публичны (public: true) — их достают из контейнера напрямую.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
По умолчанию сервисы в Symfony публичны (public: true) — их достают из контейнера напрямую.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T23-L6 · Symfony: конфигурация и сервисы
Без конфигурационного файла в config/packages бандл не заработает — настройки обязательны для каждого бандла.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Без конфигурационного файла в config/packages бандл не заработает — настройки обязательны для каждого бандла.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T23-L7 · Symfony: конфигурация и сервисы
Значения переменных окружения подставляются в services.yaml синтаксисом %env(VAR)%.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Значения переменных окружения подставляются в services.yaml синтаксисом %env(VAR)%.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
60
T23-L8 · Symfony: конфигурация и сервисы
Какая переменная окружения Symfony включает режим отладки (влияет на профайлер и отладку Twig)?
Верный ответ: app_debug
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓
Какая переменная окружения Symfony включает режим отладки (влияет на профайлер и отладку Twig)?
Верный ответ: app_debug
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓
80
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-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```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-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
80
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-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```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-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
86.0%
Symfony: Messenger
100
T16-L1 · Symfony: Messenger
Одно сообщение в Symfony Messenger может обрабатывать только один обработчик (handler).
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Одно сообщение в Symfony Messenger может обрабатывать только один обработчик (handler).
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T16-L2 · Symfony: Messenger
Транспорт sync в Messenger ставит сообщение в очередь и обрабатывает его воркером, как и async.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Транспорт sync в Messenger ставит сообщение в очередь и обрабатывает его воркером, как и async.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T16-L3 · Symfony: Messenger
Какой консольной командой запускается воркер, обрабатывающий сообщения из очередей Messenger?
Верный ответ: messenger:consume
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какой консольной командой запускается воркер, обрабатывающий сообщения из очередей Messenger?
Верный ответ: messenger:consume
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
60
T16-L4 · Symfony: Messenger
Повторы неудачных сообщений (retry_strategy) настраиваются на уровне транспорта Messenger.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✗
Повторы неудачных сообщений (retry_strategy) настраиваются на уровне транспорта Messenger.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✗
40
T16-L5 · Symfony: Messenger
По умолчанию Messenger сериализует сообщения в JSON.
Верный ответ: нет
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓
По умолчанию Messenger сериализует сообщения в JSON.
Верный ответ: нет
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓
80
T16-L6 · Symfony: Messenger
Symfony Scheduler по расписанию порождает сообщения и отправляет их через Messenger.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓
Symfony Scheduler по расписанию порождает сообщения и отправляет их через Messenger.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓
100
T16-L7 · Symfony: Messenger
Какой встроенный транспорт Messenger хранит сообщения в таблицах БД через Doctrine?
Верный ответ: doctrine
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какой встроенный транспорт Messenger хранит сообщения в таблицах БД через Doctrine?
Верный ответ: doctrine
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T16-L8 · Symfony: Messenger
Пайплайн Messenger можно расширять собственными middleware, встраивая их до или после встроенных.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Пайплайн Messenger можно расширять собственными middleware, встраивая их до или после встроенных.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет этот код? ```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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓
Что выведет этот код? ```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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓
86.0%
Symfony: версии
40
T28-L1 · Symfony: версии
Мажорные релизы Symfony выходят раз в два года, минорные — каждые шесть месяцев (в мае и ноябре).
Верный ответ: да
run-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✗
Мажорные релизы Symfony выходят раз в два года, минорные — каждые шесть месяцев (в мае и ноябре).
Верный ответ: да
run-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✗
80
T28-L2 · Symfony: версии
Какой минимальной версии PHP требует Symfony 8?
Верный ответ: 8.4
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
Какой минимальной версии PHP требует Symfony 8?
Верный ответ: 8.4
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
100
T28-L3 · Symfony: версии
Symfony 7.0 сохранила поддержку аннотаций в докблоках (валидация, маршруты).
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Symfony 7.0 сохранила поддержку аннотаций в докблоках (валидация, маршруты).
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T28-L4 · Symfony: версии
AssetMapper позволяет управлять CSS/JS без node и webpack — через importmap.php.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
AssetMapper позволяет управлять CSS/JS без node и webpack — через importmap.php.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
T28-L5 · Symfony: версии
Symfony 6.4 — обычный релиз без длительной поддержки.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓
Symfony 6.4 — обычный релиз без длительной поддержки.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓
40
T28-L6 · Symfony: версии
При переходе на новую мажорную версию Symfony деприкейшены прошлой ветки продолжают работать — мажорные релизы их не удаляют.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✓
При переходе на новую мажорную версию Symfony деприкейшены прошлой ветки продолжают работать — мажорные релизы их не удаляют.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✓
60
T28-L7 · Symfony: версии
Каждый мажорный релиз Symfony сопровождается UPGRADE-гайдом со списком изменений.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓
Каждый мажорный релиз Symfony сопровождается UPGRADE-гайдом со списком изменений.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓
40
T28-L8 · Symfony: версии
Какой компонент Symfony управляет ассетами и importmap без node/webpack?
Верный ответ: asset-mapper
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✓
Какой компонент Symfony управляет ассетами и importmap без node/webpack?
Верный ответ: asset-mapper
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✓
100
T28-L9 · Symfony: версии
Проект обновлён с Symfony 6.4 на 8.1. Что выведет этот код на 8.1? ```php echo class_exists(\Symfony\Component\Security\Guard\AbstractGuardAuthenticator::class) ? 'yes' : 'no'; ```
Верный ответ: no
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Проект обновлён с Symfony 6.4 на 8.1. Что выведет этот код на 8.1? ```php echo class_exists(\Symfony\Component\Security\Guard\AbstractGuardAuthenticator::class) ? 'yes' : 'no'; ```
Верный ответ: no
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗
Проект обновлён с 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗
72.0%
Symfony: 8.2 и будущее
40
T29-L1 · Symfony: 8.2 и будущее
На 07.11.2026 Symfony 8.2 уже выпущена.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✗
На 07.11.2026 Symfony 8.2 уже выпущена.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✗
40
T29-L2 · Symfony: 8.2 и будущее
По состоянию на 07.11.2026 Symfony 8.2 запланирована на ноябрь 2026 — в обычном шестимесячном цикле.
Верный ответ: да
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✓
По состоянию на 07.11.2026 Symfony 8.2 запланирована на ноябрь 2026 — в обычном шестимесячном цикле.
Верный ответ: да
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✓
80
T29-L3 · Symfony: 8.2 и будущее
Какая версия Symfony выйдет следующей после 8.1 (по состоянию на 07.11.2026)?
Верный ответ: 8.2
run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какая версия Symfony выйдет следующей после 8.1 (по состоянию на 07.11.2026)?
Верный ответ: 8.2
run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T29-L4 · Symfony: 8.2 и будущее
Symfony 8.2 — мажорный релиз, требующий переписывания приложений под новые API.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Symfony 8.2 — мажорный релиз, требующий переписывания приложений под новые API.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
60
T29-L5 · Symfony: 8.2 и будущее
Обновление внутри мажорной ветки (8.1 → 8.2) не должно требовать изменений кода — обратная совместимость сохраняется.
Верный ответ: да
run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓
Обновление внутри мажорной ветки (8.1 → 8.2) не должно требовать изменений кода — обратная совместимость сохраняется.
Верный ответ: да
run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓
100
T29-L6 · Symfony: 8.2 и будущее
Какая минорная версия ветки 8.x выйдет последней перед Symfony 9.0?
Верный ответ: 8.4
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какая минорная версия ветки 8.x выйдет последней перед Symfony 9.0?
Верный ответ: 8.4
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
T29-L7 · Symfony: 8.2 и будущее
Symfony 8.2 потребует обновления PHP до 8.5 — придётся обновлять PHP вместе с ней.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
Symfony 8.2 потребует обновления PHP до 8.5 — придётся обновлять PHP вместе с ней.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
100
T29-L8 · Symfony: 8.2 и будущее
Deprecations, добавленные в ветке 8.x, будут удалены не раньше Symfony 9.0.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Deprecations, добавленные в ветке 8.x, будут удалены не раньше Symfony 9.0.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
75.0%
Twig
100
T21-L1 · Twig
Внутри {{ }} в Twig можно вызывать произвольный PHP-код напрямую.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Внутри {{ }} в Twig можно вызывать произвольный PHP-код напрямую.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T21-L2 · Twig
Twig по умолчанию автоматически экранирует выводимые переменные.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Twig по умолчанию автоматически экранирует выводимые переменные.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T21-L3 · Twig
Фильтр |e в Twig экранирует строку для безопасного вывода в HTML-контексте.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Фильтр |e в Twig экранирует строку для безопасного вывода в HTML-контексте.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
40
T21-L4 · Twig
Какой фильтр из twig/intl-extra форматирует число с учётом локали?
Верный ответ: format_number
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✗
Какой фильтр из twig/intl-extra форматирует число с учётом локали?
Верный ответ: format_number
run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✗
60
T21-L5 · Twig
Фильтр |raw отключает автоэкранирование для значения.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓
Фильтр |raw отключает автоэкранирование для значения.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓
100
T21-L6 · Twig
В Twig {{ }} выводит значение выражения, а {% %} выполняет теги — условия, циклы, set.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
В Twig {{ }} выводит значение выражения, а {% %} выполняет теги — условия, циклы, set.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T21-L7 · Twig
В Twig нельзя объявить переменную в шаблоне — значения только передаются из контроллера.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
В Twig нельзя объявить переменную в шаблоне — значения только передаются из контроллера.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T21-L8 · Twig
Какая функция Twig выводит отладочную структуру переменной (массива, объекта)?
Верный ответ: dump
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какая функция Twig выводит отладочную структуру переменной (массива, объекта)?
Верный ответ: dump
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
0
T21-L9 · Twig
Что выведет этот шаблон Twig? ```twig {{ false|default(2) * 3 }} ```
Верный ответ: 6
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
Что выведет этот шаблон Twig? ```twig {{ false|default(2) * 3 }} ```
Верный ответ: 6
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
0
T21-L10 · Twig
Какой класс исключения выбросит render() этого шаблона? ```twig {{ 'a' ~ 1 + 2 }} ```
Верный ответ: runtimeerror
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
Какой класс исключения выбросит render() этого шаблона? ```twig {{ 'a' ~ 1 + 2 }} ```
Верный ответ: runtimeerror
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
70.0%
Bootstrap
100
T24-L1 · Bootstrap
Bootstrap — это CSS/JS-библиотека готовых компонентов интерфейса, а не SPA-фреймворк.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Bootstrap — это CSS/JS-библиотека готовых компонентов интерфейса, а не SPA-фреймворк.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T24-L2 · Bootstrap
Какой класс Bootstrap задаёт адаптивный контейнер с фиксированной максимальной шириной по брейкпоинтам?
Верный ответ: container
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какой класс Bootstrap задаёт адаптивный контейнер с фиксированной максимальной шириной по брейкпоинтам?
Верный ответ: container
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T24-L3 · Bootstrap
Сетка Bootstrap построена на CSS float и делит строку на 16 колонок.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Сетка Bootstrap построена на CSS float и делит строку на 16 колонок.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T24-L4 · Bootstrap
Именованные брейкпоинты Bootstrap (с инфиксом в классах) — sm, md, lg, xl, xxl; их пять.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Именованные брейкпоинты Bootstrap (с инфиксом в классах) — sm, md, lg, xl, xxl; их пять.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
20
T24-L5 · Bootstrap
Утилиты вроде .mt-3 или .px-2 используют шаг spacing-шкалы: число — множитель $spacer.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
Утилиты вроде .mt-3 или .px-2 используют шаг spacing-шкалы: число — множитель $spacer.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
100
T24-L6 · Bootstrap
Какой data-атрибут Bootstrap 5 включает интерактивный компонент (например, dropdown) на элементе?
Верный ответ: data-bs-toggle
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какой data-атрибут Bootstrap 5 включает интерактивный компонент (например, dropdown) на элементе?
Верный ответ: data-bs-toggle
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T24-L7 · Bootstrap
Компоненты Bootstrap 5 работают без jQuery — на чистом vanilla JS.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Компоненты Bootstrap 5 работают без jQuery — на чистом vanilla JS.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
0
T24-L8 · Bootstrap
Тёмную тему в Bootstrap включают классом .dark на корневом элементе.
Верный ответ: нет
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
Тёмную тему в Bootstrap включают классом .dark на корневом элементе.
Верный ответ: нет
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
40
T24-L9 · Bootstrap
Какая max-width у .container в Bootstrap 5.3 при ширине окна 992px?
Верный ответ: 960
run-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✓
Какая max-width у .container в Bootstrap 5.3 при ширине окна 992px?
Верный ответ: 960
run-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✓
0
T24-L10 · Bootstrap
Какая утилита определит цвет текста в Bootstrap 5.3: `<p class="text-danger text-primary">…</p>`? Ответь именем класса-победителя.
Верный ответ: text-danger
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
Какая утилита определит цвет текста в Bootstrap 5.3: `<p class="text-danger text-primary">…</p>`? Ответь именем класса-победителя.
Верный ответ: text-danger
run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗
66.0%
Doctrine
100
T14-L1 · Doctrine
Doctrine ORM сам создаёт таблицы в базе при первом обращении к сущности в рантайме.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Doctrine ORM сам создаёт таблицы в базе при первом обращении к сущности в рантайме.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T14-L2 · Doctrine
Какой метод EntityManager помечает новый объект как управляемый, не выполняя SQL до flush()?
Верный ответ: persist
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какой метод EntityManager помечает новый объект как управляемый, не выполняя SQL до flush()?
Верный ответ: persist
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
20
T14-L3 · Doctrine
В Doctrine ORM 3 метод EntityManager::merge() доступен и делает переданный объект управляемым.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ⬜
В Doctrine ORM 3 метод EntityManager::merge() доступен и делает переданный объект управляемым.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ⬜
100
T14-L4 · Doctrine
DQL-запросы пишутся в терминах сущностей и их полей, а не таблиц и столбцов.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
DQL-запросы пишутся в терминах сущностей и их полей, а не таблиц и столбцов.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T14-L5 · Doctrine
Что вернёт $repository->find(999), если записи с идентификатором 999 нет?
Верный ответ: null
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что вернёт $repository->find(999), если записи с идентификатором 999 нет?
Верный ответ: null
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T14-L6 · Doctrine
DoctrineBundle в Symfony автоматически вызывает flush() в конце каждого запроса.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
DoctrineBundle в Symfony автоматически вызывает flush() в конце каждого запроса.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T14-L7 · Doctrine
Для управляемой сущности достаточно изменить свойство: flush() зафиксирует изменение без вызова persist() — Unit of Work отслеживает изменения.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Для управляемой сущности достаточно изменить свойство: flush() зафиксирует изменение без вызова persist() — Unit of Work отслеживает изменения.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
40
T14-L8 · Doctrine
remove() выполняет SQL DELETE сразу, не дожидаясь flush().
Верный ответ: нет
run-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✗
remove() выполняет SQL DELETE сразу, не дожидаясь flush().
Верный ответ: нет
run-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✗
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Дано: 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Дано: 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
86.0%
PostgreSQL
100
T15-L1 · PostgreSQL
PostgreSQL использует MVCC, поэтому читатели блокируют писателей, а писатели — читателей.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
PostgreSQL использует MVCC, поэтому читатели блокируют писателей, а писатели — читателей.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T15-L2 · PostgreSQL
Какая команда SQL показывает план выполнения запроса, не выполняя сам запрос?
Верный ответ: explain
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какая команда SQL показывает план выполнения запроса, не выполняя сам запрос?
Верный ответ: explain
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
T15-L3 · PostgreSQL
SERIAL и GENERATED ... AS IDENTITY — это два названия одного и того же механизма.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
SERIAL и GENERATED ... AS IDENTITY — это два названия одного и того же механизма.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓
100
T15-L4 · PostgreSQL
UNIQUE-ограничение PostgreSQL по умолчанию допускает только одну строку с NULL в столбце.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
UNIQUE-ограничение PostgreSQL по умолчанию допускает только одну строку с NULL в столбце.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T15-L5 · PostgreSQL
Какая агрегатная функция PostgreSQL склеивает строки с разделителем?
Верный ответ: string_agg
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какая агрегатная функция PostgreSQL склеивает строки с разделителем?
Верный ответ: string_agg
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
T15-L6 · PostgreSQL
Обычный VACUUM возвращает место, занятое «мёртвыми» кортежами, операционной системе.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗
Обычный VACUUM возвращает место, занятое «мёртвыми» кортежами, операционной системе.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗
60
T15-L7 · PostgreSQL
Какое ключевое слово в определении window-функции разбивает строки на группы, для которых считается функция?
Верный ответ: partition by
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✗
Какое ключевое слово в определении window-функции разбивает строки на группы, для которых считается функция?
Верный ответ: partition by
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✗
100
T15-L8 · PostgreSQL
Уровень изоляции READ COMMITTED защищает от неповторяющегося чтения (non-repeatable read).
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Уровень изоляции READ COMMITTED защищает от неповторяющегося чтения (non-repeatable read).
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что вернёт этот 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что вернёт этот SQL-запрос (PostgreSQL 17)? ```sql CREATE TEMP TABLE t (x int); INSERT INTO t VALUES (1), (NULL); SELECT count(x) FROM t; ```
Верный ответ: 1
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
92.0%
PostgreSQL: транзакции и индексы
100
T17-L1 · PostgreSQL: транзакции и индексы
По умолчанию PostgreSQL выполняет каждый отдельный SQL-оператор в собственной неявной транзакции (autocommit).
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
По умолчанию PostgreSQL выполняет каждый отдельный SQL-оператор в собственной неявной транзакции (autocommit).
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T17-L2 · PostgreSQL: транзакции и индексы
Какая SQL-команда завершает транзакцию, сохраняя все её изменения?
Верный ответ: commit
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какая SQL-команда завершает транзакцию, сохраняя все её изменения?
Верный ответ: commit
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T17-L3 · PostgreSQL: транзакции и индексы
Индексы ускоряют не только SELECT: UPDATE и DELETE с поиском по индексированному столбцу тоже выигрывают.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Индексы ускоряют не только SELECT: UPDATE и DELETE с поиском по индексированному столбцу тоже выигрывают.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T17-L4 · PostgreSQL: транзакции и индексы
Для отката части операторов внутри транзакции PostgreSQL использует SAVEPOINT.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Для отката части операторов внутри транзакции PostgreSQL использует SAVEPOINT.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T17-L5 · PostgreSQL: транзакции и индексы
EXPLAIN ANALYZE показывает план запроса, не выполняя сам запрос.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
EXPLAIN ANALYZE показывает план запроса, не выполняя сам запрос.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T17-L6 · PostgreSQL: транзакции и индексы
Какое расширение PostgreSQL добавляет векторные типы и индексы для поиска по эмбеддингам?
Верный ответ: vector
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какое расширение PostgreSQL добавляет векторные типы и индексы для поиска по эмбеддингам?
Верный ответ: vector
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T17-L7 · PostgreSQL: транзакции и индексы
Частичный индекс (CREATE INDEX ... WHERE ...) строится только по строкам, удовлетворяющим условию.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Частичный индекс (CREATE INDEX ... WHERE ...) строится только по строкам, удовлетворяющим условию.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T17-L8 · PostgreSQL: транзакции и индексы
Уровень SERIALIZABLE в PostgreSQL реализован блокировкой строк, которые читает транзакция.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Уровень SERIALIZABLE в PostgreSQL реализован блокировкой строк, которые читает транзакция.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что вернёт этот 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Что выведет эта последовательность команд 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100.0%
HTTP и REST API
100
T19-L1 · HTTP и REST API
HTTP-статус 201 означает, что в результате запроса создан новый ресурс.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
HTTP-статус 201 означает, что в результате запроса создан новый ресурс.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T19-L2 · HTTP и REST API
Какой HTTP-статус означает успешный запрос с пустым телом ответа (например, после DELETE)?
Верный ответ: 204
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какой HTTP-статус означает успешный запрос с пустым телом ответа (например, после DELETE)?
Верный ответ: 204
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T19-L3 · HTTP и REST API
Метод DELETE идемпотентен по спецификации HTTP: повторный запрос по тому же ресурсу не меняет результат.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Метод DELETE идемпотентен по спецификации HTTP: повторный запрос по тому же ресурсу не меняет результат.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T19-L4 · HTTP и REST API
Заголовок Access-Control-Allow-Origin отправляет клиент, чтобы сервер разрешил принимать запросы с другого origin.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Заголовок Access-Control-Allow-Origin отправляет клиент, чтобы сервер разрешил принимать запросы с другого origin.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T19-L5 · HTTP и REST API
Код 429 Too Many Requests используется, когда клиент превысил лимит запросов (rate limiting).
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Код 429 Too Many Requests используется, когда клиент превысил лимит запросов (rate limiting).
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T19-L6 · HTTP и REST API
Коды 5xx означают ошибку клиента, а 4xx — ошибку на стороне сервера.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Коды 5xx означают ошибку клиента, а 4xx — ошибку на стороне сервера.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T19-L7 · HTTP и REST API
Какой HTTP-заголовок указывает MIME-тип тела запроса или ответа?
Верный ответ: content-type
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какой HTTP-заголовок указывает MIME-тип тела запроса или ответа?
Верный ответ: content-type
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T19-L8 · HTTP и REST API
PATCH не обязан быть идемпотентным по RFC 5789, в отличие от PUT.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
PATCH не обязан быть идемпотентным по RFC 5789, в отличие от PUT.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T19-L9 · HTTP и REST API
Какой HTTP-метод отправит эта команда? ```bash curl -s -d 'a=1' http://demo.local/api ```
Верный ответ: post
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какой HTTP-метод отправит эта команда? ```bash curl -s -d 'a=1' http://demo.local/api ```
Верный ответ: post
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T19-L10 · HTTP и REST API
Какой HTTP-метод отправит эта команда? ```bash curl -s -G -d 'a=1' http://demo.local/api ```
Верный ответ: get
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какой HTTP-метод отправит эта команда? ```bash curl -s -G -d 'a=1' http://demo.local/api ```
Верный ответ: get
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100.0%
Безопасность и OAuth
100
T20-L1 · Безопасность и OAuth
Проверить пароль достаточно сравнением его хеша с хешем из базы обычным оператором ==.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Проверить пароль достаточно сравнением его хеша с хешем из базы обычным оператором ==.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T20-L2 · Безопасность и OAuth
CSRF-токен выдаётся сервером (привязан к сессии) и проверяется на сервере при unsafe-запросах (POST и т.п.).
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
CSRF-токен выдаётся сервером (привязан к сессии) и проверяется на сервере при unsafe-запросах (POST и т.п.).
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T20-L3 · Безопасность и OAuth
Какой HTTP-заголовок включает политику CSP (Content Security Policy)?
Верный ответ: content-security-policy
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какой HTTP-заголовок включает политику CSP (Content Security Policy)?
Верный ответ: content-security-policy
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T20-L4 · Безопасность и OAuth
OAuth 2.0 — протокол аутентификации: access-токен сообщает, кто именно пользователь.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
OAuth 2.0 — протокол аутентификации: access-токен сообщает, кто именно пользователь.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T20-L5 · Безопасность и OAuth
XSS предотвращается валидацией ввода на сервере перед записью в базу.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
XSS предотвращается валидацией ввода на сервере перед записью в базу.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
80
T20-L6 · Безопасность и OAuth
В authorization code flow OAuth 2.0 какой параметр приходит в redirect_uri и обменивается на access-токен?
Верный ответ: code
run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
В authorization code flow OAuth 2.0 какой параметр приходит в redirect_uri и обменивается на access-токен?
Верный ответ: code
run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T20-L7 · Безопасность и OAuth
Refresh-токен живёт дольше access-токена и позволяет получить новый access-токен без повторного входа пользователя.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Refresh-токен живёт дольше access-токена и позволяет получить новый access-токен без повторного входа пользователя.
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T20-L8 · Безопасность и OAuth
Соль пароля нужно держать в секрете: без неё хеш нельзя проверить.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Соль пароля нужно держать в секрете: без неё хеш нельзя проверить.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T20-L9 · Безопасность и OAuth
Клиент обращается к токен-эндпоинту (RFC 6749) с несуществующим client_id. Какое значение поля error вернёт эндпоинт?
Верный ответ: invalid_client
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Клиент обращается к токен-эндпоинту (RFC 6749) с несуществующим client_id. Какое значение поля error вернёт эндпоинт?
Верный ответ: invalid_client
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T20-L10 · Безопасность и OAuth
OAuth 2.0: клиент начал поток с response_type=token. В какой части redirect_uri авторизационный сервер передаёт access_token?
Верный ответ: fragment
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
OAuth 2.0: клиент начал поток с response_type=token. В какой части redirect_uri авторизационный сервер передаёт access_token?
Верный ответ: fragment
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
98.0%
Тестирование: PHPUnit
100
T18-L1 · Тестирование: PHPUnit
PHPUnit выполняет тестовые методы любого класса — наследовать TestCase не обязательно.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
PHPUnit выполняет тестовые методы любого класса — наследовать TestCase не обязательно.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T18-L2 · Тестирование: PHPUnit
Метод setUp() в PHPUnit вызывается один раз перед всеми тестами класса.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Метод setUp() в PHPUnit вызывается один раз перед всеми тестами класса.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T18-L3 · Тестирование: PHPUnit
Поставщик данных (data provider) позволяет прогнать тест ровно с одним набором аргументов.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Поставщик данных (data provider) позволяет прогнать тест ровно с одним набором аргументов.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T18-L4 · Тестирование: PHPUnit
Какой метод PHPUnit объявляет ожидание исключения определённого класса?
Верный ответ: expectexception
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Какой метод PHPUnit объявляет ожидание исключения определённого класса?
Верный ответ: expectexception
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T18-L5 · Тестирование: PHPUnit
В PHPUnit стаб (stub) проверяет, какие методы на нём вызывали, а мок (mock) только подставляет данные.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
В PHPUnit стаб (stub) проверяет, какие методы на нём вызывали, а мок (mock) только подставляет данные.
Верный ответ: нет
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
100
T18-L6 · Тестирование: PHPUnit
В PHPUnit 10+ рекомендуемый способ передачи данных в тест — атрибут #[DataProvider] (аннотация @dataProvider устарела).
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
В PHPUnit 10+ рекомендуемый способ передачи данных в тест — атрибут #[DataProvider] (аннотация @dataProvider устарела).
Верный ответ: да
run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
40
T18-L7 · Тестирование: PHPUnit
В PHPUnit нельзя объявить зависимость одного теста от результата другого.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗
В PHPUnit нельзя объявить зависимость одного теста от результата другого.
Верный ответ: нет
run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗
60
T18-L8 · Тестирование: PHPUnit
Какая опция командной строки PHPUnit включает случайный порядок выполнения тестов?
Верный ответ: --order-by=random
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✗
Какая опция командной строки PHPUnit включает случайный порядок выполнения тестов?
Верный ответ: --order-by=random
run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✗
40
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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓
Сколько тестов выполнит эта команда? ```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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓
100
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
Сколько тестов выполнит эта команда и сколько из них завершится 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓
84.0%
Прогоны: точность и стоимость
| Прогон | think | Верно | % | Время | Токены (вх / вых / кэш) |
|---|---|---|---|---|---|
| run-04 | off | 214 / 240 | 89.2% | 228.6 c | 42548 / 16039 / 0 |
| run-08 | off | 208 / 240 | 86.7% | 227.3 c | 42548 / 15966 / 0 |
| run-14 | off | 204 / 240 | 85.0% | 215.6 c | 42548 / 14999 / 0 |
| run-20 | off | 207 / 240 | 86.2% | 212.3 c | 42548 / 14760 / 0 |
| run-26 | off | 212 / 240 | 88.3% | 246.2 c | 42548 / 17478 / 0 |
Флипующие клетки
| Клетка | Утверждение | run-04 | run-08 | run-14 | run-20 | run-26 |
|---|---|---|---|---|---|---|
T01-L6 | В PHP 8 приоритет оператора конкатенации (.) ниже, чем у сложения и вычитания. | нет | нет | да | нет | да |
T01-L8 | Какую строку выведет: echo 'сумма: ' . 2 + 3; (PHP 8)? | да | да | да | да | да |
T02-L3 | В PHP 8 выражение "abc" == 0 возвращает true. | нет | да | да | нет | да |
T04-L5 | Функция array_slice() по умолчанию сохраняет исходные числовые ключи массива. | нет | нет | нет | да | да |
T04-L6 | Что вернёт array_slice([10, 20, 30, 40], 1, 2)? | да | да | да | да | да |
T04-L8 | Spread-оператор [...$a, ...$b] с PHP 8.1 поддерживает массивы со строковыми ключами. | да | нет | да | нет | да |
T05-L1 | Именованные аргументы нельзя комбинировать с распаковкой массива ...$args в одном вызове. | да | нет | нет | да | да |
T06-L7 | Магический метод __get() вызывается только для несуществующих свойств. | нет | да | нет | нет | нет |
T07-L3 | Интерфейс может объявлять статические методы. | да | нет | да | да | да |
T07-L5 | Метод интерфейса может иметь реализацию по умолчанию, как метод трейта. | нет | да | нет | нет | нет |
T09-L8 | Директиву use можно писать внутри тела функции — импорт будет действовать для этой функции. | нет | нет | нет | нет | да |
T10-L4 | unset($GLOBALS['x']) внутри функции удаляет глобальную переменную только для этой функции. | да | нет | нет | нет | нет |
T10-L6 | Foreach по массиву (по значению) работает с «живым» массивом: изменения массива внутри цикла видны в этом же проходе. | да | да | нет | нет | нет |
T11-L2 | Полностью пройденный генератор можно «перемотать» через rewind() и пройти снова. | да | да | да | нет | нет |
T11-L8 | Объект класса ArrayObject нельзя обойти через foreach. | нет | да | нет | нет | нет |
T12-L6 | Какая встроенная функция возвращает имя SAPI (например, cli)? | да | да | да | да | да |
VC-L1 | В какой версии PHP появилась функция array_find()? | да | да | да | да | да |
VC-L4 | В какой версии PHP впервые появился атрибут #[\NoDiscard]? Ответь номером версии. | да | да | да | да | да |
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? Ответь номером версии. | да | да | да | да | да |
VF-L2 | RFC Context Managers v2 уже принят в PHP (на 07.11.2026). | да | да | да | нет | нет |
VF-L3 | RFC Bound-Erased Generic Types (generics) был отклонён в 2026 году. | нет | да | да | да | да |
VF-L8 | RFC о добавлении атрибута #[\Deprecated] в ядро был принят. | нет | да | нет | да | да |
T25-L4 | Что находится в самом центре луковичной архитектуры? | да | да | да | да | да |
T26-L3 | Как называется единственная точка внешнего входа в агрегат, через которую проходят все изменения? | да | да | да | да | да |
T26-L6 | Как называется граница, внутри которой модель и её язык едины, а снаружи те же понятия — другие модели? | да | да | да | да | да |
T13-L2 | Какая консольная команда Symfony выводит список всех зарегистрированных маршрутов? | да | да | да | да | да |
T22-L1 | В современном Symfony (6.0+) аутентификация строится на классах-authenticator (AuthenticatorInterface); прежняя система guard удалена. | да | да | да | нет | да |
T22-L2 | Какой атрибут Symfony проверяет роль/право прямо на методе контроллера (без него — 403)? | да | да | да | да | да |
T22-L3 | Voters (голосующие) — механизм Symfony для проверки доступа к конкретному объекту: isGranted('EDIT', $post). | да | да | нет | да | да |
T22-L4 | Ограничения валидации в современных Symfony (7+) объявляются PHP-атрибутами (#[Assert\NotBlank]); аннотации-докблоки больше не поддерживаются. | нет | нет | нет | да | нет |
T23-L3 | Какая команда Symfony выводит зарегистрированные сервисы контейнера и их алиасы? | да | да | да | да | да |
T23-L4 | Контейнер Symfony позволяет менять параметры в рантайме: $container->setParameter() работает из контроллера. | нет | да | нет | нет | нет |
T23-L8 | Какая переменная окружения Symfony включает режим отладки (влияет на профайлер и отладку Twig)? | да | да | да | да | да |
T16-L3 | Какой консольной командой запускается воркер, обрабатывающий сообщения из очередей Messenger? | да | да | да | да | да |
T16-L4 | Повторы неудачных сообщений (retry_strategy) настраиваются на уровне транспорта Messenger. | да | да | нет | да | нет |
T16-L5 | По умолчанию Messenger сериализует сообщения в JSON. | да | да | да | нет | нет |
T16-L6 | Symfony Scheduler по расписанию порождает сообщения и отправляет их через Messenger. | да | да | да | нет | да |
T28-L1 | Мажорные релизы Symfony выходят раз в два года, минорные — каждые шесть месяцев (в мае и ноябре). | нет | да | нет | да | нет |
T28-L2 | Какой минимальной версии PHP требует Symfony 8? | да | да | да | да | да |
T28-L5 | Symfony 6.4 — обычный релиз без длительной поддержки. | нет | нет | нет | да | нет |
T28-L6 | При переходе на новую мажорную версию Symfony деприкейшены прошлой ветки продолжают работать — мажорные релизы их не удаляют. | нет | да | да | да | нет |
T28-L7 | Каждый мажорный релиз Symfony сопровождается UPGRADE-гайдом со списком изменений. | да | да | нет | нет | да |
T28-L8 | Какой компонент Symfony управляет ассетами и importmap без node/webpack? | да | да | да | да | да |
T29-L1 | На 07.11.2026 Symfony 8.2 уже выпущена. | нет | нет | да | да | да |
T29-L2 | По состоянию на 07.11.2026 Symfony 8.2 запланирована на ноябрь 2026 — в обычном шестимесячном цикле. | да | нет | нет | нет | да |
T29-L3 | Какая версия Symfony выйдет следующей после 8.1 (по состоянию на 07.11.2026)? | да | да | да | да | да |
T29-L5 | Обновление внутри мажорной ветки (8.1 → 8.2) не должно требовать изменений кода — обратная совместимость сохраняется. | нет | да | да | нет | да |
T29-L7 | Symfony 8.2 потребует обновления PHP до 8.5 — придётся обновлять PHP вместе с ней. | нет | нет | да | нет | нет |
T21-L4 | Какой фильтр из twig/intl-extra форматирует число с учётом локали? | да | да | да | да | да |
T21-L5 | Фильтр |raw отключает автоэкранирование для значения. | да | да | нет | нет | да |
T21-L8 | Какая функция Twig выводит отладочную структуру переменной (массива, объекта)? | да | да | да | да | да |
T24-L5 | Утилиты вроде .mt-3 или .px-2 используют шаг spacing-шкалы: число — множитель $spacer. | нет | да | да | да | да |
T14-L2 | Какой метод EntityManager помечает новый объект как управляемый, не выполняя SQL до flush()? | да | да | да | да | да |
T14-L3 | В Doctrine ORM 3 метод EntityManager::merge() доступен и делает переданный объект управляемым. | нет | да | да | да | — |
T14-L5 | Что вернёт $repository->find(999), если записи с идентификатором 999 нет? | да | да | да | да | да |
T14-L8 | remove() выполняет SQL DELETE сразу, не дожидаясь flush(). | да | да | нет | нет | да |
T15-L3 | SERIAL и GENERATED ... AS IDENTITY — это два названия одного и того же механизма. | нет | нет | да | нет | нет |
T15-L6 | Обычный VACUUM возвращает место, занятое «мёртвыми» кортежами, операционной системе. | нет | нет | нет | нет | да |
T15-L7 | Какое ключевое слово в определении window-функции разбивает строки на группы, для которых считается функция? | да | да | да | да | да |
T20-L6 | В authorization code flow OAuth 2.0 какой параметр приходит в redirect_uri и обменивается на access-токен? | да | да | да | да | да |
T18-L7 | В PHPUnit нельзя объявить зависимость одного теста от результата другого. | нет | да | да | нет | да |
T18-L8 | Какая опция командной строки PHPUnit включает случайный порядок выполнения тестов? | да | да | да | да | да |
T01-L9 | Что выведет этот код? ```php echo intdiv(7, 2) . intdiv(-7, 2); ``` | да | да | да | да | да |
T01-L10 | Что выведет этот код? ```php echo -3 ** 2; ``` | да | да | да | да | да |
T02-L9 | Что выведет этот код? ```php echo '1e1' == '10' ? 'true' : 'false'; ``` | да | да | да | да | да |
T03-L9 | Что выведет этот код? ```php echo strtr('abc', ['a' => '1', 'ab' => '2']); ``` | да | да | да | да | да |
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(); ``` | да | да | да | да | да |
T07-L9 | Что выведет этот код? ```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(); ``` | да | да | да | да | да |
T09-L9 | Что выведет этот код? ```php namespace N; use App\Foo as Baz; echo Baz::class . '|' . \Baz::class; ``` | да | да | да | да | да |
T09-L10 | Что выведет этот код? ```php namespace Ns; class Foo {} $c = 'Foo'; echo (class_exists($c) ? 'yes' : 'no') . (class_exists(__NAMESPACE__ . '\\' . $c) ? 'yes' : 'no'); ``` | да | да | да | да | да |
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(); ``` | да | да | да | да | да |
T11-L9 | Что выведет этот код? ```php function g(): Generator { $x = yield 1; return $x + 1; } $g = g(); $g->send(10); echo $g->getReturn(); ``` | да | да | да | да | да |
T11-L10 | Что выведет этот код? ```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())); ``` | да | да | да | да | да |
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'; ``` | да | да | да | да | да |
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-L10 | Что выведет этот код? ```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; ``` | да | да | да | да | да |
T18-L9 | Сколько тестов выполнит эта команда? ```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) | да | да | да | да | да |
T18-L10 | Сколько тестов выполнит эта команда и сколько из них завершится 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) | да | да | да | да | да |
T20-L10 | OAuth 2.0: клиент начал поток с response_type=token. В какой части redirect_uri авторизационный сервер передаёт access_token? | да | да | да | да | да |
T21-L10 | Какой класс исключения выбросит render() этого шаблона? ```twig {{ 'a' ~ 1 + 2 }} ``` | да | да | да | да | да |
T22-L9 | Что выведет этот код? ```php use Symfony\Component\Validator\Validation; use Symfony\Component\Validator\Constraints as Assert; $v = Validation::createValidator(); echo count($v->validate([''], [new Assert\NotBlank()])); ``` | да | да | да | да | да |
T22-L10 | Что выведет этот код? ```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); } ``` | да | да | да | да | да |
T23-L9 | Что выведет этот код? ```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'; ``` | да | да | да | да | да |
T23-L10 | Что выведет этот код? ```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'); ``` | да | да | да | да | да |
T24-L9 | Какая max-width у .container в Bootstrap 5.3 при ширине окна 992px? | да | да | да | да | да |
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, ) {} } ``` | да | да | да | да | да |
VC-L10 | Что выведет этот код на 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'; ``` | да | да | да | да | да |
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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T01-L2Синтаксис и операторы | Оператор ?? работает по семантике isset и не порождает предупреждений для неопределённых переменных. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T01-L3Синтаксис и операторы | Что выведет: echo 'a', 'b'; | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | ab |
T01-L4Синтаксис и операторы | print возвращает значение 1 и может использоваться внутри выражения. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T01-L5Синтаксис и операторы | Оператор ?: (элвис) возвращает левый операнд, если он ложный. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T01-L6Синтаксис и операторы | В PHP 8 приоритет оператора конкатенации (.) ниже, чем у сложения и вычитания. | run-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✓ | да |
T01-L7Синтаксис и операторы | Выражение 2 ** 3 ** 2 в PHP вычисляется как (2 ** 3) ** 2, то есть 64. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T01-L8Синтаксис и операторы | Какую строку выведет: echo 'сумма: ' . 2 + 3; (PHP 8)? | run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓ | сумма: 5 |
T02-L1Типы и сравнения | Массивы при строгом сравнении === считаются равными независимо от порядка элементов. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T02-L2Типы и сравнения | Сравнение 0 == false возвращает false, потому что это строгое сравнение. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T02-L3Типы и сравнения | В PHP 8 выражение "abc" == 0 возвращает true. | run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗ | нет |
T02-L4Типы и сравнения | Значение null при нестрогом сравнении равно одновременно 0, пустой строке и false. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T02-L5Типы и сравнения | Что вернёт выражение: (int) '42abc'? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 42 |
T02-L6Типы и сравнения | Что вернёт выражение: '5' + 5? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 10 |
T02-L7Типы и сравнения | При приведении к строке значение false превращается в "0". | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T02-L8Типы и сравнения | Сравнение 0.1 + 0.2 === 0.3 возвращает false. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T03-L1Строки | strrev() корректно переворачивает строку в UTF-8. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T03-L2Строки | str_contains('Hello world', 'world') возвращает true. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T03-L3Строки | str_pad() умеет дополнять строку только справа. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T03-L4Строки | По умолчанию trim() срезает только пробелы, не трогая табы и переводы строк. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T03-L5Строки | Сколько БАЙТ вернёт strlen('привет') для строки в UTF-8? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 12 |
T03-L6Строки | Что вернёт substr('abcdef', -3)? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | def |
T03-L7Строки | ucfirst() изменяет строку, переданную ей, на месте. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T03-L8Строки | В heredoc работают интерполяция переменных, а в nowdoc — нет. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T04-L1Массивы | Функция sort() сохраняет связь ключей и значений массива. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T04-L2Массивы | Строковый ключ '5' в массиве сохраняется как целое число 5. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T04-L3Массивы | Функция in_array() по умолчанию использует строгое сравнение (===). | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T04-L4Массивы | array_filter() без колбэка удаляет из массива все «пустые» (falsy) элементы. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T04-L5Массивы | Функция array_slice() по умолчанию сохраняет исходные числовые ключи массива. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✗ | нет |
T04-L6Массивы | Что вернёт array_slice([10, 20, 30, 40], 1, 2)? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗ | [20,30] |
T04-L7Массивы | Сколько элементов будет в count(['a' => 1] + ['a' => 9, 'b' => 2])? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 2 |
T04-L8Массивы | Spread-оператор [...$a, ...$b] с PHP 8.1 поддерживает массивы со строковыми ключами. | run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✓ | да |
T05-L1Функции и замыкания | Именованные аргументы нельзя комбинировать с распаковкой массива ...$args в одном вызове. | run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✗ | нет |
T05-L2Функции и замыкания | Анонимная функция без use видит переменные внешней области видимости. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T05-L3Функции и замыкания | Что вернёт func_num_args() внутри function f($a) { return func_num_args(); } при вызове f(1, 2, 3)? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 3 |
T05-L4Функции и замыкания | Тело стрелочной функции fn может состоять из нескольких выражений в фигурных скобках. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T05-L5Функции и замыкания | Стрелочная функция fn захватывает внешние переменные по ссылке (лениво, при использовании). | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T05-L6Функции и замыкания | Замыкание, объявленное как static function () {}, не захватывает $this. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T05-L7Функции и замыкания | Что выведет: $x = 5; $f = function () use ($x) { return $x; }; $x = 7; echo $f(); | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 5 |
T05-L8Функции и замыкания | В «слабом» режиме типизации (без strict_types) передача строки "5" в параметр с типом int допустима. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T06-L1ООП: классы и наследование | PHP поддерживает promotion свойств в конструкторе: public function __construct(private int $x) {}. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T06-L2ООП: классы и наследование | Какое ключевое слово запрещает переопределять метод в подклассах? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | final |
T06-L3ООП: классы и наследование | Метод, объявленный как final, нельзя переопределить в подклассе. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T06-L4ООП: классы и наследование | Свойства родителя с видимостью private доступны в подклассе. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T06-L5ООП: классы и наследование | Что вернёт get_class(new class {})? Ответь частью имени до нулевого байта (без пути к файлу). | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | class@anonymous |
T06-L6ООП: классы и наследование | private-метод родителя не входит в контракт наследования: потомок может объявить метод с тем же именем с любой видимостью. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T06-L7ООП: классы и наследование | Магический метод __get() вызывается только для несуществующих свойств. | run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T06-L8ООП: классы и наследование | Что бросит повторное присваивание readonly-свойства — Exception или Error? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | error |
T07-L1Интерфейсы, трейты, enum | Интерфейс может объявлять константы. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T07-L2Интерфейсы, трейты, enum | Какой оператор проверяет, что объект реализует класс или интерфейс? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | instanceof |
T07-L3Интерфейсы, трейты, enum | Интерфейс может объявлять статические методы. | run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T07-L4Интерфейсы, трейты, enum | Оператор instanceof проверяет только наследование классов: интерфейсы он не учитывает. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T07-L5Интерфейсы, трейты, enum | Метод интерфейса может иметь реализацию по умолчанию, как метод трейта. | run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T07-L6Интерфейсы, трейты, enum | Абстрактный метод в абстрактном классе может иметь видимость protected. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T07-L7Интерфейсы, трейты, enum | Сколько элементов вернёт Foo::cases() для enum Foo { case A; case B; case C; }? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 3 |
T07-L8Интерфейсы, трейты, enum | Трейт может объявлять константы. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T08-L1Исключения и ошибки | Интерфейс Throwable — общий предок и для Exception, и для Error. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T08-L2Исключения и ошибки | Блок catch (Exception $e) перехватит и TypeError, потому что TypeError в итоге наследуется от Exception. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T08-L3Исключения и ошибки | Оператор @ подавляет и исключения тоже. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T08-L4Исключения и ошибки | Какой класс ошибки бросит intdiv(5, 0)? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | divisionbyzeroerror |
T08-L5Исключения и ошибки | Блок finally выполняется только если исключение было поймано блоком catch. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T08-L6Исключения и ошибки | Исключение, выброшенное внутри блока finally, никак не влияет на результат try-блока. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T08-L7Исключения и ошибки | Что вернёт выражение: (bool) new Exception('x')? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | true |
T08-L8Исключения и ошибки | Функции, зарегистрированные через register_shutdown_function(), выполняются при вызове exit. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T09-L1Пространства имён и автозагрузка | Директива use App\Service\Mailer; сама по себе подключает файл с классом. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T09-L2Пространства имён и автозагрузка | Что пишут после use, чтобы импортировать функцию (а не класс): слово function или const? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | function |
T09-L3Пространства имён и автозагрузка | В какой файл (путь от src/) PSR-4 «App\ → src/» положит класс App\Controller\Api\UserController? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | src/controller/api/usercontroller.php |
T09-L4Пространства имён и автозагрузка | Подключение vendor/autoload.php регистрирует обработчики через spl_autoload_register(). | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T09-L5Пространства имён и автозагрузка | Магическая константа __NAMESPACE__ содержит имя текущего пространства имён. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T09-L6Пространства имён и автозагрузка | Относительное имя класса (без ведущего \) в new резолвится от глобального корня. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T09-L7Пространства имён и автозагрузка | При маппинге PSR-4 «App\ → src/» класс App\Model\User лежит в файле src/Model/User.php. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T09-L8Пространства имён и автозагрузка | Директиву use можно писать внутри тела функции — импорт будет действовать для этой функции. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗ | нет |
T10-L1Ссылки и область видимости | Массивы при присваивании копируются, а не передаются по ссылке. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T10-L2Ссылки и область видимости | Что выведет: $a = [1, 2]; $b = $a; $b[] = 3; echo count($a); | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 2 |
T10-L3Ссылки и область видимости | Внутри функции пользовательские переменные глобальной области недоступны без global, $GLOBALS или передачи параметром. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T10-L4Ссылки и область видимости | unset($GLOBALS['x']) внутри функции удаляет глобальную переменную только для этой функции. | run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T10-L5Ссылки и область видимости | Что выведет: function inc(&$x) { $x++; } $n = 5; inc($n); echo $n; | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 6 |
T10-L6Ссылки и область видимости | Foreach по массиву (по значению) работает с «живым» массивом: изменения массива внутри цикла видны в этом же проходе. | run-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T10-L7Ссылки и область видимости | Статическое свойство класса у каждого экземпляра своё: изменения в одном объекте не видны в других. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T10-L8Ссылки и область видимости | Массив может иметь булев ключ true, и он сохранится как bool. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T11-L1Генераторы, итераторы, SPL | Внутри генератора можно использовать return со значением, и оно попадёт в $gen->getReturn(). | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T11-L2Генераторы, итераторы, SPL | Полностью пройденный генератор можно «перемотать» через rewind() и пройти снова. | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓ | нет |
T11-L3Генераторы, итераторы, SPL | Конструкция yield from делегирует проход другому генератору или итерируемому объекту. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T11-L4Генераторы, итераторы, SPL | Что вернёт get_class(g()) для function g() { yield 1; }? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | generator |
T11-L5Генераторы, итераторы, SPL | Сколько элементов вернёт count(iterator_to_array((function () { yield from [1, 2, 3]; })())); | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 3 |
T11-L6Генераторы, итераторы, SPL | Класс SplStack реализует очередь FIFO. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T11-L7Генераторы, итераторы, SPL | ArrayIterator позволяет обернуть массив и обходить его через интерфейс Iterator. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T11-L8Генераторы, итераторы, SPL | Объект класса ArrayObject нельзя обойти через foreach. | run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T12-L1Конфигурация и безопасность | password_hash() генерирует соль автоматически — передавать её отдельно не нужно. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T12-L2Конфигурация и безопасность | Алгоритм PASSWORD_DEFAULT в PHP 8 — это md5 с автоматически добавленной солью. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T12-L3Конфигурация и безопасность | Что вернёт password_verify('secret', password_hash('secret', PASSWORD_DEFAULT))? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | true |
T12-L4Конфигурация и безопасность | Функция strip_tags() защищает от SQL-инъекций. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T12-L5Конфигурация и безопасность | Функция session_regenerate_id() используется для защиты от фиксации сессии при входе пользователя. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T12-L6Конфигурация и безопасность | Какая встроенная функция возвращает имя SAPI (например, cli)? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | php_sapi_name |
T12-L7Конфигурация и безопасность | session_destroy() удаляет данные сессии на сервере, но не cookie в браузере пользователя. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T12-L8Конфигурация и безопасность | Без вызова session_start() массив $_SESSION автоматически загружается данными сессии. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
VC-L1PHP 8.4–8.5 | В какой версии PHP появилась функция array_find()? | run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | 8.4 |
VC-L2PHP 8.4–8.5 | Property hooks (get/set прямо в объявлении свойства) вошли в PHP 8.4. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
VC-L3PHP 8.4–8.5 | Асимметричная видимость (public private(set) string $name) появилась в PHP 8.4. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
VC-L4PHP 8.4–8.5 | В какой версии PHP впервые появился атрибут #[\NoDiscard]? Ответь номером версии. | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | 8.5 |
VC-L5PHP 8.4–8.5 | В какой версии PHP впервые появился оператор конвейера |> (pipe)? Ответь номером версии. | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | 8.5 |
VC-L6PHP 8.4–8.5 | В какой версии PHP появился clone-with — синтаксис clone($obj, ['x' => 1])? Ответь номером версии. | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | 8.5 |
VC-L7PHP 8.4–8.5 | В какой версии PHP появились функции array_first() и array_last()? | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | 8.5 |
VC-L8PHP 8.4–8.5 | Для какой версии PHP был принят RFC Partial Function Application v2 (по состоянию на 07.11.2026)? Ответь номером версии. | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | 8.6 |
VF-L1PHP: 8.6+ и будущее | Для какой версии PHP реализован RFC clamp_v2 (функция clamp()) по состоянию на 07.11.2026? Ответь номером версии. | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | 8.6 |
VF-L2PHP: 8.6+ и будущее | RFC Context Managers v2 уже принят в PHP (на 07.11.2026). | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓ | нет |
VF-L3PHP: 8.6+ и будущее | RFC Bound-Erased Generic Types (generics) был отклонён в 2026 году. | run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
VF-L4PHP: 8.6+ и будущее | На 07.11.2026 RFC о включении многопоточности (ZTS) по умолчанию уже принят в PHP. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
VF-L5PHP: 8.6+ и будущее | В PHP 8.5 дженериков (параметризованных типов) по-прежнему нет. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
VF-L6PHP: 8.6+ и будущее | На 07.11.2026 последняя стабильная версия PHP — 8.5, а PHP 8.6 ещё не выпущена (GA — 19.11.2026). | run-04: ✗ · run-08: — · run-14: ✗ · run-20: ✗ · run-26: ✗ | да |
VF-L7PHP: 8.6+ и будущее | Ветка PHP 6 так и не вышла: после PHP 5.6 вышел сразу PHP 7.0. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
VF-L8PHP: 8.6+ и будущее | RFC о добавлении атрибута #[\Deprecated] в ядро был принят. | run-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓ | да |
T25-L1Чистая архитектура | Правило зависимостей в чистой и луковичной архитектурах: внутренние слои не знают о внешних — зависимости направлены к центру. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T25-L2Чистая архитектура | Сущности домена не импортируют ни Doctrine, ни Symfony — только язык и, возможно, стандартную библиотеку. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T25-L3Чистая архитектура | Контроллеры и Twig-шаблоны относятся к слою бизнес-логики, потому что именно они вызывают use cases. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T25-L4Чистая архитектура | Что находится в самом центре луковичной архитектуры? | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | доменная модель |
T25-L5Чистая архитектура | Нарушение границ слоёв можно поймать автоматикой: анализатор зависимостей между слоями (например, deptrac) падает на запрещённом вызове. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T25-L6Чистая архитектура | Use case (interactor) может принимать HTTP-запрос или EntityManager как аргументы — так проще. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T25-L7Чистая архитектура | Как называется компонент, предоставляющий коллекцию агрегатов/сущностей, скрывая механизм хранения за интерфейсом? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | репозиторий |
T25-L8Чистая архитектура | Замена PostgreSQL на другую БД в чистой архитектуре затрагивает только внешний слой — домен и use cases не меняются. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T26-L1DDD | Агрегат в DDD — это просто другое название таблицы базы данных. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T26-L2DDD | Value Object неизменяем и сравнивается по значениям полей, а не по идентификатору. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T26-L3DDD | Как называется единственная точка внешнего входа в агрегат, через которую проходят все изменения? | run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓ | aggregate root |
T26-L4DDD | В DDD репозиторий объявляется на агрегат (его корень), а не на каждую сущность. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T26-L5DDD | Ubiquitous language — единый язык модели, общий для разработчиков и предметных экспертов. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T26-L6DDD | Как называется граница, внутри которой модель и её язык едины, а снаружи те же понятия — другие модели? | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | bounded context |
T26-L7DDD | Анемичная модель (объекты только с геттерами/сеттерами, логика в сервисах) — рекомендуемый стиль DDD. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T26-L8DDD | Bounded context означает, что у каждого контекста своя модель: одно и то же понятие в разных контекстах — разные классы. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T13-L1Symfony | Сервисы в DI-контейнере Symfony по умолчанию создаются лениво — при первом обращении к ним. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T13-L2Symfony | Какая консольная команда Symfony выводит список всех зарегистрированных маршрутов? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | debug:router |
T13-L3Symfony | Autowiring в Symfony требует вручную перечислять каждый сервис в конфигурации services.yaml. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T13-L4Symfony | Twig-шаблоны компилируются в PHP-классы и кэшируются между запросами. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T13-L5Symfony | Контейнер DI в dev-окружении Symfony пересобирается только после изменения отслеживаемых файлов, а не при каждом запросе. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T13-L6Symfony | Какая переменная окружения выбирает активное окружение Symfony (dev/prod)? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | app_env |
T13-L7Symfony | Метод контроллера может быть private — маршрутизация Symfony работает с любыми методами класса. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T13-L8Symfony | Подписчики событий (EventSubscriber) всегда получают события раньше слушателей (listeners), потому что интерфейс даёт им приоритет. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T22-L1Symfony: Security и формы | В современном Symfony (6.0+) аутентификация строится на классах-authenticator (AuthenticatorInterface); прежняя система guard удалена. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓ | да |
T22-L2Symfony: Security и формы | Какой атрибут Symfony проверяет роль/право прямо на методе контроллера (без него — 403)? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | isgranted |
T22-L3Symfony: Security и формы | Voters (голосующие) — механизм Symfony для проверки доступа к конкретному объекту: isGranted('EDIT', $post). | run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓ | да |
T22-L4Symfony: Security и формы | Ограничения валидации в современных Symfony (7+) объявляются PHP-атрибутами (#[Assert\NotBlank]); аннотации-докблоки больше не поддерживаются. | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗ | да |
T22-L5Symfony: Security и формы | CSRF-защита форм в Symfony включена по умолчанию: форма проверяет токен при отправке. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T22-L6Symfony: Security и формы | Валидация формы в Symfony выполняется на сервере, даже если клиентская (HTML5) проверка прошла. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T22-L7Symfony: Security и формы | Какая команда Symfony maker генерирует класс формы (FormType)? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | make:form |
T22-L8Symfony: Security и формы | Symfony хранит пароль пользователя в сессии в открытом виде (plaintext). | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T23-L1Symfony: конфигурация и сервисы | Конфигурация бандлов Symfony лежит в config/packages — по одному файлу на бандл или тему. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T23-L2Symfony: конфигурация и сервисы | Файл .env с dev-дефолтами коммитится в репозиторий, а настоящие секреты живут в некоммитимом .env.local. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T23-L3Symfony: конфигурация и сервисы | Какая команда Symfony выводит зарегистрированные сервисы контейнера и их алиасы? | run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓ | debug:container |
T23-L4Symfony: конфигурация и сервисы | Контейнер Symfony позволяет менять параметры в рантайме: $container->setParameter() работает из контроллера. | run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T23-L5Symfony: конфигурация и сервисы | По умолчанию сервисы в Symfony публичны (public: true) — их достают из контейнера напрямую. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T23-L6Symfony: конфигурация и сервисы | Без конфигурационного файла в config/packages бандл не заработает — настройки обязательны для каждого бандла. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T23-L7Symfony: конфигурация и сервисы | Значения переменных окружения подставляются в services.yaml синтаксисом %env(VAR)%. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T23-L8Symfony: конфигурация и сервисы | Какая переменная окружения Symfony включает режим отладки (влияет на профайлер и отладку Twig)? | run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓ | app_debug |
T16-L1Symfony: Messenger | Одно сообщение в Symfony Messenger может обрабатывать только один обработчик (handler). | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T16-L2Symfony: Messenger | Транспорт sync в Messenger ставит сообщение в очередь и обрабатывает его воркером, как и async. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T16-L3Symfony: Messenger | Какой консольной командой запускается воркер, обрабатывающий сообщения из очередей Messenger? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | messenger:consume |
T16-L4Symfony: Messenger | Повторы неудачных сообщений (retry_strategy) настраиваются на уровне транспорта Messenger. | run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✗ | да |
T16-L5Symfony: Messenger | По умолчанию Messenger сериализует сообщения в JSON. | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓ | нет |
T16-L6Symfony: Messenger | Symfony Scheduler по расписанию порождает сообщения и отправляет их через Messenger. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓ | да |
T16-L7Symfony: Messenger | Какой встроенный транспорт Messenger хранит сообщения в таблицах БД через Doctrine? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | doctrine |
T16-L8Symfony: Messenger | Пайплайн Messenger можно расширять собственными middleware, встраивая их до или после встроенных. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T28-L1Symfony: версии | Мажорные релизы Symfony выходят раз в два года, минорные — каждые шесть месяцев (в мае и ноябре). | run-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✗ | да |
T28-L2Symfony: версии | Какой минимальной версии PHP требует Symfony 8? | run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓ | 8.4 |
T28-L3Symfony: версии | Symfony 7.0 сохранила поддержку аннотаций в докблоках (валидация, маршруты). | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T28-L4Symfony: версии | AssetMapper позволяет управлять CSS/JS без node и webpack — через importmap.php. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T28-L5Symfony: версии | Symfony 6.4 — обычный релиз без длительной поддержки. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓ | нет |
T28-L6Symfony: версии | При переходе на новую мажорную версию Symfony деприкейшены прошлой ветки продолжают работать — мажорные релизы их не удаляют. | run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✓ | нет |
T28-L7Symfony: версии | Каждый мажорный релиз Symfony сопровождается UPGRADE-гайдом со списком изменений. | run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓ | да |
T28-L8Symfony: версии | Какой компонент Symfony управляет ассетами и importmap без node/webpack? | run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✓ | asset-mapper |
T29-L1Symfony: 8.2 и будущее | На 07.11.2026 Symfony 8.2 уже выпущена. | run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✗ | нет |
T29-L2Symfony: 8.2 и будущее | По состоянию на 07.11.2026 Symfony 8.2 запланирована на ноябрь 2026 — в обычном шестимесячном цикле. | run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✓ | да |
T29-L3Symfony: 8.2 и будущее | Какая версия Symfony выйдет следующей после 8.1 (по состоянию на 07.11.2026)? | run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 8.2 |
T29-L4Symfony: 8.2 и будущее | Symfony 8.2 — мажорный релиз, требующий переписывания приложений под новые API. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T29-L5Symfony: 8.2 и будущее | Обновление внутри мажорной ветки (8.1 → 8.2) не должно требовать изменений кода — обратная совместимость сохраняется. | run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓ | да |
T29-L6Symfony: 8.2 и будущее | Какая минорная версия ветки 8.x выйдет последней перед Symfony 9.0? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 8.4 |
T29-L7Symfony: 8.2 и будущее | Symfony 8.2 потребует обновления PHP до 8.5 — придётся обновлять PHP вместе с ней. | run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓ | нет |
T29-L8Symfony: 8.2 и будущее | Deprecations, добавленные в ветке 8.x, будут удалены не раньше Symfony 9.0. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T21-L1Twig | Внутри {{ }} в Twig можно вызывать произвольный PHP-код напрямую. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T21-L2Twig | Twig по умолчанию автоматически экранирует выводимые переменные. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T21-L3Twig | Фильтр |e в Twig экранирует строку для безопасного вывода в HTML-контексте. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T21-L4Twig | Какой фильтр из twig/intl-extra форматирует число с учётом локали? | run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✗ | format_number |
T21-L5Twig | Фильтр |raw отключает автоэкранирование для значения. | run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓ | да |
T21-L6Twig | В Twig {{ }} выводит значение выражения, а {% %} выполняет теги — условия, циклы, set. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T21-L7Twig | В Twig нельзя объявить переменную в шаблоне — значения только передаются из контроллера. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T21-L8Twig | Какая функция Twig выводит отладочную структуру переменной (массива, объекта)? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | dump |
T24-L1Bootstrap | Bootstrap — это CSS/JS-библиотека готовых компонентов интерфейса, а не SPA-фреймворк. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T24-L2Bootstrap | Какой класс Bootstrap задаёт адаптивный контейнер с фиксированной максимальной шириной по брейкпоинтам? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | container |
T24-L3Bootstrap | Сетка Bootstrap построена на CSS float и делит строку на 16 колонок. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T24-L4Bootstrap | Именованные брейкпоинты Bootstrap (с инфиксом в классах) — sm, md, lg, xl, xxl; их пять. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T24-L5Bootstrap | Утилиты вроде .mt-3 или .px-2 используют шаг spacing-шкалы: число — множитель $spacer. | run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | нет |
T24-L6Bootstrap | Какой data-атрибут Bootstrap 5 включает интерактивный компонент (например, dropdown) на элементе? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | data-bs-toggle |
T24-L7Bootstrap | Компоненты Bootstrap 5 работают без jQuery — на чистом vanilla JS. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T24-L8Bootstrap | Тёмную тему в Bootstrap включают классом .dark на корневом элементе. | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | нет |
T14-L1Doctrine | Doctrine ORM сам создаёт таблицы в базе при первом обращении к сущности в рантайме. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T14-L2Doctrine | Какой метод EntityManager помечает новый объект как управляемый, не выполняя SQL до flush()? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | persist |
T14-L3Doctrine | В Doctrine ORM 3 метод EntityManager::merge() доступен и делает переданный объект управляемым. | run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: — | нет |
T14-L4Doctrine | DQL-запросы пишутся в терминах сущностей и их полей, а не таблиц и столбцов. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T14-L5Doctrine | Что вернёт $repository->find(999), если записи с идентификатором 999 нет? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | null |
T14-L6Doctrine | DoctrineBundle в Symfony автоматически вызывает flush() в конце каждого запроса. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T14-L7Doctrine | Для управляемой сущности достаточно изменить свойство: flush() зафиксирует изменение без вызова persist() — Unit of Work отслеживает изменения. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T14-L8Doctrine | remove() выполняет SQL DELETE сразу, не дожидаясь flush(). | run-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✗ | нет |
T15-L1PostgreSQL | PostgreSQL использует MVCC, поэтому читатели блокируют писателей, а писатели — читателей. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T15-L2PostgreSQL | Какая команда SQL показывает план выполнения запроса, не выполняя сам запрос? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | explain |
T15-L3PostgreSQL | SERIAL и GENERATED ... AS IDENTITY — это два названия одного и того же механизма. | run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓ | нет |
T15-L4PostgreSQL | UNIQUE-ограничение PostgreSQL по умолчанию допускает только одну строку с NULL в столбце. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T15-L5PostgreSQL | Какая агрегатная функция PostgreSQL склеивает строки с разделителем? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | string_agg |
T15-L6PostgreSQL | Обычный VACUUM возвращает место, занятое «мёртвыми» кортежами, операционной системе. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗ | нет |
T15-L7PostgreSQL | Какое ключевое слово в определении window-функции разбивает строки на группы, для которых считается функция? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✗ | partition by |
T15-L8PostgreSQL | Уровень изоляции READ COMMITTED защищает от неповторяющегося чтения (non-repeatable read). | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T17-L1PostgreSQL: транзакции и индексы | По умолчанию PostgreSQL выполняет каждый отдельный SQL-оператор в собственной неявной транзакции (autocommit). | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T17-L2PostgreSQL: транзакции и индексы | Какая SQL-команда завершает транзакцию, сохраняя все её изменения? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | commit |
T17-L3PostgreSQL: транзакции и индексы | Индексы ускоряют не только SELECT: UPDATE и DELETE с поиском по индексированному столбцу тоже выигрывают. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T17-L4PostgreSQL: транзакции и индексы | Для отката части операторов внутри транзакции PostgreSQL использует SAVEPOINT. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T17-L5PostgreSQL: транзакции и индексы | EXPLAIN ANALYZE показывает план запроса, не выполняя сам запрос. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T17-L6PostgreSQL: транзакции и индексы | Какое расширение PostgreSQL добавляет векторные типы и индексы для поиска по эмбеддингам? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | vector |
T17-L7PostgreSQL: транзакции и индексы | Частичный индекс (CREATE INDEX ... WHERE ...) строится только по строкам, удовлетворяющим условию. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T17-L8PostgreSQL: транзакции и индексы | Уровень SERIALIZABLE в PostgreSQL реализован блокировкой строк, которые читает транзакция. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T19-L1HTTP и REST API | HTTP-статус 201 означает, что в результате запроса создан новый ресурс. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T19-L2HTTP и REST API | Какой HTTP-статус означает успешный запрос с пустым телом ответа (например, после DELETE)? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 204 |
T19-L3HTTP и REST API | Метод DELETE идемпотентен по спецификации HTTP: повторный запрос по тому же ресурсу не меняет результат. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T19-L4HTTP и REST API | Заголовок Access-Control-Allow-Origin отправляет клиент, чтобы сервер разрешил принимать запросы с другого origin. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T19-L5HTTP и REST API | Код 429 Too Many Requests используется, когда клиент превысил лимит запросов (rate limiting). | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T19-L6HTTP и REST API | Коды 5xx означают ошибку клиента, а 4xx — ошибку на стороне сервера. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T19-L7HTTP и REST API | Какой HTTP-заголовок указывает MIME-тип тела запроса или ответа? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | content-type |
T19-L8HTTP и REST API | PATCH не обязан быть идемпотентным по RFC 5789, в отличие от PUT. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T20-L1Безопасность и OAuth | Проверить пароль достаточно сравнением его хеша с хешем из базы обычным оператором ==. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T20-L2Безопасность и OAuth | CSRF-токен выдаётся сервером (привязан к сессии) и проверяется на сервере при unsafe-запросах (POST и т.п.). | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T20-L3Безопасность и OAuth | Какой HTTP-заголовок включает политику CSP (Content Security Policy)? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | content-security-policy |
T20-L4Безопасность и OAuth | OAuth 2.0 — протокол аутентификации: access-токен сообщает, кто именно пользователь. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T20-L5Безопасность и OAuth | XSS предотвращается валидацией ввода на сервере перед записью в базу. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T20-L6Безопасность и OAuth | В authorization code flow OAuth 2.0 какой параметр приходит в redirect_uri и обменивается на access-токен? | run-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | code |
T20-L7Безопасность и OAuth | Refresh-токен живёт дольше access-токена и позволяет получить новый access-токен без повторного входа пользователя. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T20-L8Безопасность и OAuth | Соль пароля нужно держать в секрете: без неё хеш нельзя проверить. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T18-L1Тестирование: PHPUnit | PHPUnit выполняет тестовые методы любого класса — наследовать TestCase не обязательно. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T18-L2Тестирование: PHPUnit | Метод setUp() в PHPUnit вызывается один раз перед всеми тестами класса. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T18-L3Тестирование: PHPUnit | Поставщик данных (data provider) позволяет прогнать тест ровно с одним набором аргументов. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T18-L4Тестирование: PHPUnit | Какой метод PHPUnit объявляет ожидание исключения определённого класса? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | expectexception |
T18-L5Тестирование: PHPUnit | В PHPUnit стаб (stub) проверяет, какие методы на нём вызывали, а мок (mock) только подставляет данные. | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | нет |
T18-L6Тестирование: PHPUnit | В PHPUnit 10+ рекомендуемый способ передачи данных в тест — атрибут #[DataProvider] (аннотация @dataProvider устарела). | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | да |
T18-L7Тестирование: PHPUnit | В PHPUnit нельзя объявить зависимость одного теста от результата другого. | run-04: ✓ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗ | нет |
T18-L8Тестирование: PHPUnit | Какая опция командной строки PHPUnit включает случайный порядок выполнения тестов? | run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✗ | --order-by=random |
T01-L9Синтаксис и операторы | Что выведет этот код? ```php echo intdiv(7, 2) . intdiv(-7, 2); ``` | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✓ | 3-3 |
T01-L10Синтаксис и операторы | Что выведет этот код? ```php echo -3 ** 2; ``` | run-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓ | -9 |
T02-L9Типы и сравнения | Что выведет этот код? ```php echo '1e1' == '10' ? 'true' : 'false'; ``` | run-04: ✓ · run-08: ✗ · run-14: ✓ · run-20: ✓ · run-26: ✓ | true |
T02-L10Типы и сравнения | Что выведет этот код? ```php switch ('a') { case 0: echo 'zero'; break; default: echo 'other'; } ``` | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | other |
T03-L9Строки | Что выведет этот код? ```php echo strtr('abc', ['a' => '1', 'ab' => '2']); ``` | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | 2c |
T03-L10Строки | Что выведет этот код? ```php echo '[' . substr('hello', -10) . ']'; ``` | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | [hello] |
T04-L9Массивы | Что выведет этот код? ```php $a = ['k' => 1, 'n' => 2]; $b = ['k' => 9, 'm' => 3]; echo implode(',', array_keys($a + $b)); ``` | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | yxz |
T05-L10Функции и замыкания | Что выведет этот код? ```php function f(int $a, int $b): int { return $a - $b; } echo f(...['b' => 1, 'a' => 5]); ``` | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 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-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓ | 3 |
T06-L9ООП: классы и наследование | Что выведет этот код? ```php class A { public function who(): string { return static::class; } } class B extends A {} echo (new B)->who(); ``` | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗ | 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 0 |
T08-L10Исключения и ошибки | Что выведет этот код? ```php function f(): int { try { return 1; } finally { return 2; } } echo f(); ``` | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 2 |
T08-L9Исключения и ошибки | Что выведет этот код? ```php try { try { throw new RuntimeException('first'); } finally { throw new LogicException('second'); } } catch (LogicException $e) { echo $e->getMessage(); } ``` | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | second |
T09-L9Пространства имён и автозагрузка | Что выведет этот код? ```php namespace N; use App\Foo as Baz; echo Baz::class . '|' . \Baz::class; ``` | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓ | 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-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓ | noyes |
T10-L9Ссылки и область видимости | Что выведет этот код? ```php $a = [1, 2, 3]; foreach ($a as &$v) {} $v = 99; echo implode(',', $a); ``` | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓ | 3 |
T11-L9Генераторы, итераторы, SPL | Что выведет этот код? ```php function g(): Generator { $x = yield 1; return $x + 1; } $g = g(); $g->send(10); echo $g->getReturn(); ``` | run-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✗ | 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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | 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-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✓ | noyes |
T12-L10Конфигурация и безопасность | Что выведет этот код на PHP 8.5? ```php echo (E_ALL & 2048) === 0 ? 'strict-out' : 'strict-in'; ``` | run-04: ✗ · run-08: ✓ · run-14: ✗ · run-20: ✗ · run-26: ✗ | strict-out |
T13-L9Symfony | Что выведет этот код? ```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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | mapped |
T13-L10Symfony | Что выведет этот код? ```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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗ | bca |
T14-L10Doctrine | Дано: 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | same |
T14-L9Doctrine | Дано: 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 0 |
T15-L10PostgreSQL | Что вернёт этот SQL-запрос (PostgreSQL 17)? ```sql CREATE TEMP TABLE t (x int); INSERT INTO t VALUES (1), (NULL); SELECT count(x) FROM t; ``` | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 1 |
T15-L9PostgreSQL | Что вернёт этот 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 10,30,60 |
T16-L9Symfony: 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | m1m2 |
T16-L10Symfony: 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓ | 11 |
T17-L9PostgreSQL: транзакции и индексы | Что вернёт этот 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 1 |
T17-L10PostgreSQL: транзакции и индексы | Что выведет эта последовательность команд 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✓ | 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 2,1 |
T19-L9HTTP и REST API | Какой HTTP-метод отправит эта команда? ```bash curl -s -d 'a=1' http://demo.local/api ``` | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | post |
T19-L10HTTP и REST API | Какой HTTP-метод отправит эта команда? ```bash curl -s -G -d 'a=1' http://demo.local/api ``` | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | get |
T20-L9Безопасность и OAuth | Клиент обращается к токен-эндпоинту (RFC 6749) с несуществующим client_id. Какое значение поля error вернёт эндпоинт? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | invalid_client |
T20-L10Безопасность и OAuth | OAuth 2.0: клиент начал поток с response_type=token. В какой части redirect_uri авторизационный сервер передаёт access_token? | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | fragment |
T21-L9Twig | Что выведет этот шаблон Twig? ```twig {{ false|default(2) * 3 }} ``` | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | 6 |
T21-L10Twig | Какой класс исключения выбросит render() этого шаблона? ```twig {{ 'a' ~ 1 + 2 }} ``` | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | runtimeerror |
T22-L9Symfony: 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-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✓ · run-26: ✗ | 0 |
T22-L10Symfony: 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-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✗ | symfony\component\form\exception\logicexception |
T23-L9Symfony: конфигурация и сервисы | Что выведет этот код? ```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-04: ✓ · run-08: ✓ · run-14: ✗ · run-20: ✓ · run-26: ✓ | same |
T23-L10Symfony: конфигурация и сервисы | Что выведет этот код? ```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-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | hi bob! |
T24-L9Bootstrap | Какая max-width у .container в Bootstrap 5.3 при ширине окна 992px? | run-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✓ | 960 |
T24-L10Bootstrap | Какая утилита определит цвет текста в Bootstrap 5.3: `<p class="text-danger text-primary">…</p>`? Ответь именем класса-победителя. | run-04: ✗ · run-08: ✗ · run-14: ✗ · run-20: ✗ · run-26: ✗ | 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 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-04: ✗ · run-08: ✓ · run-14: ✓ · run-20: ✗ · run-26: ✓ | 3 |
T26-L10DDD | Что выведет этот код? ```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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 10,15 |
T26-L9DDD | Что выведет этот код? ```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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | 1 |
VC-L9PHP 8.4–8.5 | Что выведет этот код на PHP 8.5? ```php class C { public function hi(): string { return 'hi'; } } echo new C()->hi(); ``` | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | hi |
VC-L10PHP 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-04: ✗ · run-08: ✗ · run-14: ✓ · run-20: ✗ · run-26: ✗ | yesno |
T28-L9Symfony: версии | Проект обновлён с Symfony 6.4 на 8.1. Что выведет этот код на 8.1? ```php echo class_exists(\Symfony\Component\Security\Guard\AbstractGuardAuthenticator::class) ? 'yes' : 'no'; ``` | run-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✓ | no |
T28-L10Symfony: версии | Проект обновлён с 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-04: ✓ · run-08: ✓ · run-14: ✓ · run-20: ✓ · run-26: ✗ | noyes |