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