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

Строгая типизация

Тип в сигнатуре ещё не гарантирует одинаковое поведение во всех файлах и точках вызова. Вопросы проверяют strict_types, nullable и union-типы, пересечения, свойства и места, где проверка должна происходить раньше исполнения.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Учитывайте файл вызова, точную сигнатуру и фактический тип переданного значения. Время — 70 минут.
Вопрос 1 из 25
Где действует declare(strict_types=1)?
PHP
declare(strict_types=1);

require 'library.php';
$result = calculate('12');
Вопрос 2 из 25
Примет ли функция параметр int, если из файла со strict_types=1 передать строку «4»?
PHP
declare(strict_types=1);
function twice(int $n): int { return $n*2; }
echo twice('3');
Вопрос 3 из 25
Разрешает ли strict_types передачу int в параметр float?
PHP
declare(strict_types=1);
function half(float $value): float { return $value / 2; }
echo half(10);
Вопрос 4 из 25
Почему declare должно стоять в начале файла?
Вопрос 5 из 25
Что strict_types не делает?
Вопрос 6 из 25
Что означает int|string?
PHP
function normalize(int|string $value): string
{
    return (string) $value;
}
Вопрос 7 из 25
Чем ?User эквивалентен?
PHP
function currentUser(): ?User
{
    return null;
}
Вопрос 8 из 25
Почему int|false иногда хуже отдельного результата-объекта?
Вопрос 9 из 25
Какой тип и значение вернёт функция с объединённым типом int|string для строкового аргумента?
PHP
function kind(int|string $v): string {
 if (is_int($v)) return 'int';
 return 'string';
}
echo kind('7');
Вопрос 10 из 25
Допустим ли тип int|int?
Вопрос 11 из 25
Что означает Countable&Iterator?
PHP
function inspect(Countable&Iterator $items): int
{
    return count($items);
}
Вопрос 12 из 25
Подойдёт ли ArrayIterator для Countable&Iterator?
PHP
$items = new ArrayIterator([1, 2, 3]);
echo inspect($items);
Вопрос 13 из 25
Чем A&B отличается от A|B?
Вопрос 14 из 25
Почему пересечение полезно в декораторе коллекции?
Вопрос 15 из 25
Что произойдёт при передаче объекта только Countable?
PHP
function inspect(Countable&Iterator $items): int { return count($items); }
inspect(new class implements Countable { public function count(): int {return 0;} });
Вопрос 16 из 25
В слабом режиме что обычно произойдёт со строкой "12" для параметра int?
PHP
function quantity(int $value): int { return $value; }
echo quantity('12');
Вопрос 17 из 25
Почему (int) $input не заменяет FILTER_VALIDATE_INT?
PHP
$raw = '12px';
$cast = (int) $raw;
$validated = filter_var($raw, FILTER_VALIDATE_INT);
var_dump($cast, $validated);
Вопрос 18 из 25
Что произойдёт с return "5" при : int в строгом файле?
PHP
declare(strict_types=1);
function answer(): int { return '5'; }
answer();
Вопрос 19 из 25
Почему bool-параметр опасен для сырой строки "false" в слабом режиме?
Вопрос 20 из 25
Как лучше обрабатывать числовой идентификатор из JSON?
Вопрос 21 из 25
Что даёт PHPStan или Psalm сверх runtime-типов?
PHP
/** @param list<User> $users */
function firstActive(array $users): ?User
{
    foreach ($users as $user) {
        if ($user->isActive()) return $user;
    }
    return null;
}
Вопрос 22 из 25
Как проверить строгий контракт функции?
PHP
declare(strict_types=1);
function double(int $value): int { return $value * 2; }

assert(double(4) === 8);
try {
    double('4');
    assert(false);
} catch (TypeError) {
    assert(true);
}
Вопрос 23 из 25
Почему переход старого проекта на strict_types лучше делать постепенно?
Вопрос 24 из 25
В журнале TypeError что важнее всего для причины?
Вопрос 25 из 25
Docblock обещает list<User>, но метод возвращает смешанный array. Что делать?

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

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

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

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