Может ли функция иметь несколько типов возвращаемых значений в PHP? - PullRequest
8 голосов
/ 28 ноября 2011

Есть ли способ заставить мою функцию PHP возвращать другой тип значения?Следующий код должен объяснить, что я имею в виду:

<?php
public function test($value){
    if($value == 1){
        return "SUCCESS";
    } else {
        return false;
    }
}
?>

При одном условии я возвращаю строку, в противном случае я возвращаю логическое значение.Это разрешено / возможно?

Ответы [ 6 ]

14 голосов
/ 28 ноября 2011

Да. PHP свободно набран, поэтому любая переменная может иметь любой тип. Возвращаемые значения функции не являются исключением.

3 голосов
/ 28 ноября 2011

Да, это возможно (но не рекомендуется).

Вы должны по крайней мере объявить это в своем комментарии Javadoc

/**
 * @param int $value
 * @return mixed string|boolean
 **/
public function test($value){
    if($value == 1){
        return "SUCCESS";
    } else {
        return false;
    }
}

Даже встроенные функции PHP иногда делают это (например, mysql_connect => boolean | resource link)

0 голосов
/ 16 августа 2017

Мне самому интересно об этом, зачем возвращать что-то другое? Получающий конец получает две вещи для проверки? Я думаю, что решил вернуться к пустой версии типа или массива с элементом status.

Два примера, как все может измениться в функции / методе, и вы в основном вынуждены проверять больше, чем ожидалось:

<?php
function test($value){
if($value == 1){
    $local = successFunction($value);
    return $local;
} else {
    return false;
}
}

$res = test(1);
if ($res) {
   echo "We are OK ?  Right? No? What is this?";
}

версия 2

function test($value){
if($value == 1){
    $local = successFunction($value);
    return $local;
} else {
    return "";
}
}

$res = test(1);
   if (!empty($res)) {
        echo "more likely we are ok";
    }
?>
0 голосов
/ 28 ноября 2011

Это разрешено.Тем не менее, это не рекомендуется в том случае, если вы дали.Для примера, в котором это имеет смысл, взгляните, например, на strpos () function.

0 голосов
/ 28 ноября 2011

Да, это разрешено, не так, как в C, Java, ..., где вы должны определить возврат ..

0 голосов
/ 28 ноября 2011

Это разрешено / возможно?

Да.

...