Нормально ли, что нотация функции противоречит здравому смыслу?

Все видно в простом примере:

declare(strict_types=1);

function summ(string $a, string $b): string {
    return bcadd($a, $b);
}


Т.к. bcmath работает со строками, то всё начинает выглядеть немного странно. Складываем числа, но при использовании strict_types приходится указывать тип входных параметров и результат - string. Какие-то числовые константы, которые могут использоваться в приложении - тоже приходится делать строками, хотя с точки зрения здравого смысла, например, Pi - тоже число.

Как думаете, нормально ли это? И если нет, то что делать?
  • Вопрос задан
  • 348 просмотров
Решения вопроса 1
SerafimArts
@SerafimArts
Senior Notepad Reader
Для таких случаев придумали docblock (а начиная с php 8 - union типы):

# PHP 7+

declare(strict_types=1);

/**
 * @param int|string|float $a
 * @param int|string|float $b
 * @return string
 */
function summ($a, $b): string {
    return bcadd((string)$a, (string)$b);
}


# PHP 8+

declare(strict_types=1);

function summ(int|float|string $a, int|float|string $b): string {
    return bcadd((string)$a, (string)$b);
}


P.S. Помимо этого можно кастовать результат к инту, если он в пределах допустимого int32/int64 (зависит от ОС и сборки пыха) значения
return $result > \PHP_INT_MAX ? $result : (int)$result;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
inoise
@inoise Куратор тега PHP
Solution Architect, AWS Certified, Serverless
Вообще не нормально. Любые интерфейсы и делаются для того чтобы было понятно и адекватно. Можно просто внутри производить приведение типов
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы