PHP PHP  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Замыкания и стрелочные функции

Тест разбирает момент захвата переменной, отличие значения от ссылки и неявное окружение короткой функции. В более сложных сценариях нужно оценить bindTo, статические замыкания и удобство тестирования.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Перед ответом зафиксируйте, какие значения попали в замыкание и могут ли они измениться. Таймер — 70 минут.
Вопрос 1 из 25
Что хранится в $double?
PHP
$double = function(int $n): int { return $n*2; };
echo $double(3);
Вопрос 2 из 25
Что создаёт strlen(...)?
PHP
$length = strlen(...);
var_dump($length instanceof Closure);
echo $length('PHP');
Вопрос 3 из 25
Как типизировать параметр, принимающий вызываемое значение?
PHP
function transform(string $value, callable $callback): string
{
    return $callback($value);
}
Вопрос 4 из 25
Что выведет array_map?
PHP
$out=array_map(function(int $n):int{return $n*2;},[1,2,3]);
print_r($out);
Вопрос 5 из 25
Когда объект с __invoke удобнее Closure?
Вопрос 6 из 25
Какое число напечатает стрелочная функция, если внешнюю переменную изменить после её создания?
PHP
$x=10;
$f=function() use ($x){return $x;};
$x=20;
echo $f();
Вопрос 7 из 25
Как увидеть позднее изменение $x?
PHP
$x = 10;
$read = function () use (&$x): int { return $x; };
$x = 20;
echo $read();
Вопрос 8 из 25
Что выведут два вызова?
PHP
$n=0;
$next=function() use (&$n){return ++$n;};
echo $next(),' ',$next();
Вопрос 9 из 25
Захватывается ли $this обычным нестатическим Closure внутри метода?
PHP
final class Counter
{
    private int $value = 7;

    public function reader(): Closure
    {
        return function (): int { return $this->value; };
    }
}
Вопрос 10 из 25
Почему длинный список use может быть сигналом проблемы?
Вопрос 11 из 25
Что меняет bindTo?
PHP
class Box { private int $value = 5; }
$reader = function (): int { return $this->value; };
$bound = $reader->bindTo(new Box(), Box::class);
echo $bound();
Вопрос 12 из 25
Что выведет пример?
PHP
class Box{private int $v=7;}
$get=function(){return $this->v;};
$bound=$get->bindTo(new Box(),Box::class);
echo $bound();
Вопрос 13 из 25
Почему bindTo редко стоит использовать в обычной предметной логике?
Вопрос 14 из 25
Что вернёт bindTo при невозможной привязке static Closure к объекту?
Вопрос 15 из 25
Чем Closure::call удобен для разового вызова?
Вопрос 16 из 25
Какой результат вернёт стрелочная функция при вызове с аргументом 5?
PHP
$offset=3;
$f=fn(int $n):int=>$n+$offset;
echo $f(5);
Вопрос 17 из 25
Можно ли использовать несколько операторов внутри fn?
PHP
$short = fn(string $value): string => trim($value);

$withSeveralSteps = function (string $value): string {
    $value = trim($value);
    if ($value === '') {
        throw new InvalidArgumentException('Пустая строка');
    }
    return mb_strtolower($value, 'UTF-8');
};
Вопрос 18 из 25
Почему $count++ внутри fn не изменит внешнюю переменную как ожидается?
Вопрос 19 из 25
Какой результат map?
PHP
$factor=3;
$out=array_map(fn($n)=>$n*$factor,[1,2,3]);
Вопрос 20 из 25
Когда обычный Closure читается лучше fn?
Вопрос 21 из 25
Как проверить компаратор отдельно?
PHP
$compare = fn(int $left, int $right): int => $left <=> $right;
assert($compare(1, 2) < 0);
assert($compare(2, 2) === 0);
assert($compare(3, 2) > 0);
Вопрос 22 из 25
Почему сериализация обычного Closure не поддерживается штатно?
Вопрос 23 из 25
Callback бросает исключение внутри array_map. Что происходит?
Вопрос 24 из 25
Как обнаружить скрытый сетевой вызов в callback?
Вопрос 25 из 25
Почему is_callable полезнее проверки is_string для callback?

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу