PHP несколько функций, возвращаемых типов String|int
Я столкнулся с немного необычным сценарием, когда моя функция возвращает несколько типов string or integer
, Я пытаюсь объявить типы возвращаемых данных. Может ли кто-нибудь предложить мне наилучшую практику, чтобы объявить.
Я знаю, что нуль или другой тип, я могу использовать что-то вроде этого
/**
* Get the result status as a formatted string
* @return string|null formatted status
*/
public function abStatus() : ?string {
но моя функция, как показано ниже, возвращает строку или целое число
/**
* Get the score for this action
* @return string|int
*/
public function getAlphaScore() {
if ($this->type != self::TYPE_ACTION) {
return 0;
}
if (empty($this->action->status < self::STATUS_IMPORTED) {
return 'U';
}
return ActionCalculator::actionScore($this->action->score);//returns integer here
}
Теперь мне интересно, как я должен объявить свою функцию с типами возвращаемых
public function getAlphaScore() : string {
или же
public function getAlphaScore() : int {
также я хочу узнать идеи / предложения / лучшие практики в такой ситуации, когда будут возвращены несколько типов возврата
/**
* @param $compareAction
* @return float|int|null
*/
3 ответа
"Лучшая" практика сказала бы, что лучше иметь последовательный тип возврата. Нет способа определить строгий тип возвращаемого значения, если у вас нет строгого возвращаемого типа. Таким образом, вы находитесь в этой ситуации как бы по замыслу.
Вероятно, лучше посмотреть, почему у вас есть эти разные типы возвращаемых данных. Тогда у вас есть несколько вариантов.
Я не совсем ясен в логике, но более уместно бросить исключение вместо возврата
0
?Не отличное решение, но если первый
if
возвращенныйnull
вместо0
Вы можете использовать возвращаемый тип?string
Имеет ли смысл иметь две функции?
getAlphaScoreAsInteger
getAlphaScoreAsString
, В зависимости от того, что вы пытаетесь сделать, конечно
Вы не объявляете тип возвращаемого значения тогда.
Это либо string
или же int
Вы не можете иметь оба.
Вот тут и начинает действовать слабая типизация PHP.
Я бы предложил, чтобы передовой практикой было возвращать только один тип из метода или функции, а не смешанные типы.
Предполагая, что оценка является целочисленным или строковым представлением целого числа ( 123 или "123"), затем решите, какой тип вы хотите использовать для приведения типа использования для его принудительного применения.
Так как вы возвращаете "U", я бы предложил привести его к строке. Вы можете добавить проверку, используя ctype_digit, чтобы убедиться, что ваша строка содержит только числовые символы перед ее возвратом, и, если нет, выдать исключение.
Либо верните null вместо 'U' и используйте аннотацию? Int. Строгая проверка возвращаемого значения позволит вам превратить ноль в "U".