J'ai trouvé ce code sur un site Web pour convertir Celsius, en Fahrenheit et Kelvin. Mais je ne peux pas comprendre une seule ligne à l'intérieur.

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";

?>;

Pourquoi in_array doit-il return 0? J'ai supprimé cette ligne et la fonction fonctionne toujours.

1
Lionel SYMR 18 avril 2020 à 11:14

2 réponses

Meilleure réponse

Le return 0 sert à garantir que le cas switch ne fonctionnera que si vous utilisez les valeurs avec dans le tableau $tab_val.

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

Donc, si vous utilisez des symboles autres que C, F ou K, la fonction retournera immédiatement 0 sans exécuter le code d'alésage.

Ainsi, votre code fonctionnera sans cette ligne jusqu'à ce que vous saisissiez un type non valide.

Si vous entrez un type non valide return 0 rend le résultat de sortie à 0, sinon il sera vide.

Même si vous utilisez c, k ou f au lieu de C, K ou F le résultat sera 0 car les valeurs sont majuscules sensible

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

La sortie du code ci-dessus sera 0 puisque nous avons utilisé f au lieu de F

0
Ajanyan Pradeep 18 avril 2020 à 09:47

C'est pour se prémunir contre les cas où un utilisateur essaie d'appeler la fonction avec un symbole de température qui n'existe pas:

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

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

Si vous supprimez le test et exécutez à nouveau l'exemple 2, vous n'obtenez aucune sortie:

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

ÉDITER

Si le 0 est utilisé comme code d'erreur comme suggéré dans les commentaires, je dirais que ce n'est pas la meilleure idée de le faire. Et si vous saisissez une température qui se convertit réellement à 0? :

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

// Output: Conversion failed
0
compuphys 18 avril 2020 à 10:17