Имеет смысл возвращать только один тип и выдавать исключение, если этот тип не может быть возвращен в некоторых случаях.В других случаях имеет смысл возвращать null
или этот тип.
Если вы используете PHP 7, вы можете объявить тип возвращаемого значения следующим образом ...
function sum($a, $b): float {
return $a + $b;
}
Это может помочь вам убедиться, что ваша функция не выполняетсяслишком много и сделать его более удобным для потребителя вашего класса.
У него есть ограничения.В PHP нет ( co / contra variance ) (пока), поэтому существуют ситуации (например, интерфейс), в которых подсказки типов фактически будут препятствовать простоте вашего API. Кроме того, есть случаи, когда вы можете захотеть использовать универсальный в качестве типа возврата.Они также еще не являются частью PHP, поэтому в тех случаях, когда вы хотите использовать универсальный тип в качестве подсказки типа, вам пока придется жить без подсказки типа.
Похоже, у вас естьобратил внимание на некоторые преимущества уже используемого типа возврата, а также преимущества использования типа параметра.
Использование параметров ввода совершенно очевидно: оно уменьшает сложность функции и делает ее склонной кделая одну краткую вещь.
На мой взгляд, использование возвращаемого типа делает то же самое ... но вместо уменьшения сложности внутри вашего метода, это уменьшает сложность кода, который выполняет этот метод ...что, возможно, более важно, потому что сложный код, который вызывает метод, должен будет обрабатывать возвращаемые типы переменных повсеместно.
Простой пример ...
function add($a, $b) {
if (is_string($a) && is_string($b)) {
return $a . $b;
} else if (is_int($a) && is_int($b)) {
return $a + $b;
}
}
Эта функция не вводит свои параметры, поэтому нам нужно подумать о ее общих случаях использования и обработать различные типы параметров в функции.Это лишает нашу функцию фокуса, и мы никогда не обнаружим все возможные случаи, то есть функция, скорее всего, сломается, а затем увеличится в объеме.
Мы также не знаем, какой будет тип возвращаемого значения, поэтомувезде, где эта функция используется, мы должны думать об этом ...
$result = add($a, $b);
if (is_string($result)) {
// Do something
} else if (is_int($result)) {
// Do something else
}
Мы можем исправить это:
function add(Int $a, Int $b) : Int {
return $a + $b;
}
function concatStrings(String $a, String $b) : String {
return $a . $b;
}
Теперь, где бы мы ни использовали эти функции, наша логика проверки типов исчезает.Наши функции короче и менее сложны, и каждый знает, как их использовать и что они должны делать.Их тестирование также становится проще.