Какой тип подсказки использовать, если возвращаемое значение является смешанным? - PullRequest
0 голосов
/ 17 мая 2018
function foo ($a): mixed
{
    if ($a == 1)    
        return true;
    else
        return 'foo';
}

var_dump(foo(1));

Поскольку mixed не является реальным типом, это приводит к:

Неустранимая ошибка: Uncaught TypeError: Возвращаемое значение foo () должно быть экземпляром mixed ...

Есть ли способ ввести подсказку mixed возвращаемого значения или вы просто не объявляете подсказки типа в сценарии этого типа?

1 Ответ

0 голосов
/ 17 мая 2018

Тип подсказки существуют для того, чтобы ввести некоторые ограничения на передаваемое или возвращаемое значение.Поскольку «mixed» вообще допускает любое значение, его использование в качестве подсказки типа будет бессмысленным, поэтому просто опустите его.

Были предложения добавить «типы объединения» в язык, что позволило бы вамобъявить тип возвращаемого значения в вашем примере как bool|string, но ни один еще не был принят.

Что вы можете сделать, это document возвращаемое значение вашей функции в блоке документов.Среды IDE и генераторы документации обычно понимают синтаксис @return bool|string, и затем вы можете добавить описание , почему тип возвращаемого значения изменяется, и когда ожидать, какой тип.

Конечно,Стоит рассмотреть вариант, который заключается в пересмотре вашего дизайна и предложении функции, которая может сообщить результат без , возвращая различные типы для разных случаев.Например, использование исключений вместо специального значения для ошибок или разбиение функции, такой как getThing(boolean $asString): float|string, на две функции getThingAsFloat(): float и getThingAsString(): string.

...