Не могу понять эту строку (in_array) - PullRequest
1 голос
/ 18 апреля 2020

Я нашел этот код на веб-сайте для преобразования в градусы Цельсия, Фарантхейта и Кельвина. Но я не могу понять одну строчку внутри.

function conv_temp($val , $type_val , $type_wanted) {
  $tab_val = array("C", "F", "K");
  if (!(in_array($type_val, $tab_val) && in_array($type_wanted,$tab_val)))
    return 0;
  switch ($type_val) {
    case "C" : // degrees Celsius
      switch ($type_wanted) {
        case "C" :
          return $val;
        case "F" :
          return ($val * 9 / 5 + 32);
        case "K" :
          return ($val + 273.16);
    case "F" : // degrees Fahrenheit
      switch ($type_wanted) {
        case "C" :
          return (($val - 32) * 5 / 9);
        case "F" :
          return $val;
        case "K" :
          return ((($val - 32) * 5 / 9) + 273.16);
    case "K" : // degrees Kelvin
      switch ($type_wanted) {
        case "C" :
          return ($val - 273.16);
        case "F" :
          return (($val - 273.16) * 9 / 5 + 32);
        case "K" :
          return $val;
        }
      }
    }
  }
}

echo conv_temp(5,'C','F')."\n";

?>;

Почему in_array должно return 0? Я удалил эту строку, и функция все еще работает.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

return 0 гарантирует, что регистр switch будет работать, только если вы используете значения в массиве $tab_val.

$tab_val = array("C", "F", "K");

То есть, если вы используете любые символы, кроме C, F или K, функция немедленно вернет 0 без выполнения кода расширения.

Таким образом, ваш код будет работать без этой строки, пока вы не введете недопустимый тип.

Если при вводе неверного типа return 0 результат вывода будет равен 0, иначе он будет пустым.

Даже если вы используете c, k или f вместо C, K или F результат будет равен 0, так как значения чувствительны к регистру

echo conv_temp(5,'C','f')."\n";

Вывод вышеуказанного кода будет 0, так как мы использовали f вместо F

0 голосов
/ 18 апреля 2020

Он защищает от случаев, когда пользователь пытается вызвать функцию с несуществующим символом температуры:

// EXAMPLE 1
echo conv_temp(5,'C','F')."\n";
// Output: 41

// EXAMPLE 2
echo conv_temp(5,'C','J')."\n";
// Output: 0

Если вы удалите тест и снова запустите Пример 2, вы не получите никакого вывода :

echo conv_temp(5,'C','J')."\n";
// Output: 

EDIT

Если 0 используется в качестве кода ошибки, как предлагается в комментариях, я бы сказал, что это не лучшая идея. Что если вы введете температуру, которая на самом деле конвертируется в 0? :

$temp = conv_temp(-273.16,'C','K');
if ($temp == 0) {
  echo "Conversion failed";
} else {
  echo "$temp";
}

// Output: Conversion failed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...