/
Программирование
/
Курс PHP
/

Объявления типов

PHP: Объявления типов

В PHP в функцию можно передать любые значения. Иногда это усложняет понимание кода: не всегда ясно, что именно ожидает функция и что она возвращает. Чтобы сделать код понятнее, в PHP есть объявления типов (их еще называют аннотациями типов или type hints). С их помощью можно явно указать, какие значения принимает функция и какой результат она возвращает. Таким образом мы решаем сразу несколько задач:

  • Улучшаем работу редактора кода, получаем подсказки, лучше автодополнение и тому подобное.
  • Помогаем ИИ-агентам быстрее видеть структуру и принимать более правильные решения, минимизируя случайные ошибки.
  • Появляется возможность проверять корректность программы без ее запуска, за счет статической проверки. Такая проверка не гарантирует, что логика программы написана правильно, но, по крайней мере, в ней не будет ошибок типов.

Как указывать типы параметров

Объявление типов описывает два элемента. Типы параметров указываются прямо в определении функции перед именем каждого параметра. Тип возвращаемого результата указывается после списка параметров через двоеточие.

Разберем на примере функции, которая вычисляет сумму двух переданных значений:

<?php

function add(int $a, int $b): int
{
    return $a + $b;
}

print_r(add(2, 3)); // => 5
function concat(string $a, string $b): string
                │         │            │
                │         │            └── тип возвращаемого значения
                │         └── тип параметра $b
                └── тип параметра $a

Теперь редактор кода будет подсказывать, что функция add() принимает два числа и возвращает число. Если попытаться передать неподходящее значение, редактор подсветит это как проблему и предупредит.

Кстати, такие записи вы уже видели. В уроке про необязательные параметры мы разбирали сигнатуру функции round() из документации — round(int|float $num, int $precision = 0): float. Это и есть объявления типов.

Типы проверяются при выполнении

В отличие от многих языков, PHP не только подсказывает типы редактору, но и проверяет их во время работы программы. Если передать значение несовместимого типа, программа завершится с ошибкой TypeError:

<?php

add('abc', 3);
// TypeError: add(): Argument #1 ($a) must be of type int, string given

При этом PHP остается языком со слабой типизацией, и совместимые значения он приводит автоматически. Строка '2' выглядит как число, поэтому такой вызов сработает:

<?php

add('2', 3); // => 5

Это то же самое поведение, которое мы разбирали в уроке про слабую типизацию.

Какие типы используются в объявлениях

На этом этапе достаточно знать объявления для простых, примитивных типов данных:

  • int для целых чисел, float для чисел с плавающей точкой
  • string для строк
  • bool для логических значений (true или false)
<?php

function describe(string $name, int $age, float $height): string
{
    return "{$name}, {$age} лет, рост {$height}";
}

print_r(describe('Anna', 25, 1.70));
// => Anna, 25 лет, рост 1.7

Если функция ничего не возвращает, то в качестве возвращаемого типа указывается void. Например, функция может только печатать текст на экран:

<?php

function printGreeting(string $name): void
{
    print_r("Hello, {$name}!");
}

printGreeting('Anna');
// => Hello, Anna!

Пример с параметрами по умолчанию

Объявления типов работают одинаково как для обязательных параметров, так и для тех, у которых есть значение по умолчанию. Сначала указывается тип, потом имя параметра и через = стандартное значение:

<?php

function greet(string $name, string $greeting = 'Hello'): string
{
    return "{$greeting}, {$name}";
}

print_r(greet('Anna'));         // => Hello, Anna
print_r(greet('Kirill', 'Hi')); // => Hi, Kirill

В этом примере $name является обязательным параметром, а $greeting имеет значение по умолчанию. Объявления показывают типы обоих параметров и возвращаемого результата.

Объявления типов и проверка кода

Кроме проверки во время выполнения, существуют инструменты статической проверки кода, то есть проверки, выполняемой без запуска. «Статическая» значит, что проверка происходит еще до запуска программы. Инструмент читает исходный код и сверяет, соответствуют ли переданные значения указанным типам. Например, если функция принимает строку, а вы передадите число, то при статической проверке это будет показано как ошибка.

Особенно удобно, когда такие ошибки подсвечивает редактор прямо во время написания кода. Это позволяет сразу увидеть проблему и исправить ее, не дожидаясь запуска программы. Благодаря этому многие неожиданные ошибки отлавливаются заранее и в работающем коде их становится меньше.

Объявления типов не являются обязательными. Функции можно писать и без них, PHP все равно будет работать. Но когда объявления есть, код становится понятнее для людей и удобнее для редакторов. Указание типов в своем коде считается хорошей практикой.

Задание

Приложение создает текстовые разделители из повторяющихся символов — например, ------- или =====. Реализуйте функцию wordMultiply(). Она должна принимать два параметра:

  • Строку
  • Число, которое обозначает, сколько раз нужно повторить строку

И возвращает строку, которая повторяется n-раз. Если передается ноль, то возвращается пустая строка.

<?php

$text = 'php';
print_r(wordMultiply($text, 2)); // => phpphp
print_r(wordMultiply($text, 0)); // =>

Укажите объявления типов при определении функции.

Подсказки

  • Не забудьте, что тип также нужно указать и у возвращаемого значения
  • Повторить строку поможет функция str_repeat()

Полезное

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются