Типизация параметров

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

В PHP типизация параметров помогает сделать код надежнее и понятнее. Вы указываете, какого типа данные ожидает функция, и PHP сам проверяет это при вызове. Звучит просто, но на практике есть нюансы: nullable-типы (когда можно передать null), union-типы (несколько вариантов), строгий режим и обычный режим работы. В обычном режиме PHP пытается преобразовать типы автоматически, а в строгом — выдает ошибку при несовпадении. Здесь вы попрактикуетесь объявлять типы для параметров и возвращаемых значений, разберетесь с разницей между слабой типизацией ⓘ и строгим режимом, поработаете с nullable и union типами. Задания идут от базовых конструкций к более сложным сценариям с комбинированными типами и обработкой ошибок типизации.

Список тем

Базовая типизация параметра

id: 38992_task1

Функция должна принимать целое число и возвращать его квадрат. Добавьте объявление типа для параметра и возвращаемого значения.

Заполните пропуски
function square(input1S $num): input2S
{
    return $num * $num;
}

echo square(5);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправьте синтаксис типизации

id: 38992_task2

В коде две синтаксические ошибки в объявлении типов. Найдите и исправьте обе строки.

Найдите ошибку и исправьте
<?php
function greet($name string), string
{
    return "Hello, " . $name;
}
 
echo greet("Alice");
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Nullable типы

id: 38992_task3

Функция может принимать строку или null. Если передан null, должна вернуть "Guest", иначе саму строку. Объявите nullable тип для параметра и возвращаемого значения.

Заполните пропуски
function getName(input1S $name): input2S
{
    return $name ?? "Guest";
}

echo getName(null);
echo getName("Bob");
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Автоматическое приведение типов

id: 38992_task4

Код работает в обычном режиме (без strict_types). Что выведет этот код?

Выберите правильный вариант ответа
<?php
function multiply(int $a, int $b): int
{
    return $a * $b;
}

echo multiply("5", "3");
Сообщения
Проверить
Показать подсказку

Типы данных и их назначение

id: 38992_task5

Сопоставьте типы параметров с их описанием. Расположите правую колонку в правильном порядке.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Целые числа без дробной части
Массивы любого размера
Функции и методы, которые можно вызвать
Логические значения true/false
Дробные числа с плавающей точкой
float
callable
int
bool
array
Сообщения
Проверить
Показать подсказку

Заполните типы из банка

id: 38992_task6

Функция принимает массив чисел и возвращает их сумму. Заполните пропуски правильными типами из банка.

Нужно правильно расставить в пропуски предложенные варианты
function sum(input1S $numbers, input2S $initial = 0): input3S
{
    $result = $initial;
    foreach ($numbers as $num) {
        $result += $num;
    }
    return $result;
}

echo sum([1, 2, 3, 4], 10);
array
int
float
string
bool
mixed
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Ошибка в строгом режиме

id: 38992_task7

Код включает строгий режим типизации, но при вызове функции происходит ошибка. Исправьте строку с вызовом функции так, чтобы она работала корректно.

Найдите ошибку и исправьте
<?php
declare(strict_types=1);
 
function add(int $a, int $b): int
{
    return $a + $b;
}
 
echo add("10", 5);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Результат с union типом

id: 38992_task8

Функция принимает int или float и возвращает удвоенное значение. Что выведет этот код?

Что должно получиться?
<?php
function double(int|float $num): int|float
{
    return $num * 2;
}

echo double(7.5);
Сообщения
Проверить
Показать подсказку

Типизация с void

id: 38992_task9

Функция выводит приветствие, но ничего не возвращает. Объявите правильные типы для параметра и возвращаемого значения.

Заполните пропуски
function printGreeting(input1S $name): input2S
{
    echo "Welcome, $name!";
}

printGreeting("John");
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Соберите функцию с типизацией

id: 38992_task10

Соберите функцию, которая принимает два числа (int) и возвращает их произведение. Функция должна работать корректно в строгом режиме.

Перетяните в правильном порядке строки из одного блока в другой
declare(strict_types=1);
echo multiply(4, 5);
{
    return $a * $b;
}
function multiply(int $a, int $b): int
<?php
function multiply(string $a, string $b): string
    return $a + $b;
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Приведение bool к int

id: 38992_task11

В обычном режиме PHP приводит bool к int автоматически. Что выведет код?

Выберите правильный вариант ответа
<?php
function calculate(int $x, int $y): int
{
    return $x + $y;
}

echo calculate(true, 10);
Сообщения
Проверить
Показать подсказку

Сложная типизация с mixed

id: 38992_task12

Функция должна принимать любой тип данных (число, строку, массив и т.д.) и возвращать его строковое представление. Укажите правильный тип для параметра и возвращаемого значения.

Заполните пропуски
function toStringRepresentation(input1S $value): input2S
{
    if (is_array($value)) {
        return print_r($value, true);
    }
    return (string)$value;
}

echo toStringRepresentation([1, 2, 3]);
echo toStringRepresentation(42);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправьте union тип

id: 38992_task13

Функция должна принимать int или string, но в синтаксисе union типа допущена ошибка. Найдите и исправьте строку с объявлением функции.

Найдите ошибку и исправьте
<?php
function process(int, string $data): string
{
    return "Processed: " . $data;
}
 
echo process(100);
echo process("text");
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Nullable тип и значение по умолчанию

id: 38992_task15

Функция принимает nullable строку. Если передан null, используется "Unknown". Что выведет код при вызове с null?

Что должно получиться?
<?php
function getLabel(?string $text): string
{
    return $text ?? "Unknown";
}

echo getLabel(null);
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру