2017-06-05 1 views
1

Quelqu'un peut me aider avec la fonction suivante, pourquoi return l'intérieur du boîtier du commutateur fonctionne (retour prix/quantité convertie correcte):php l'intérieur du boîtier du commutateur fonctionne mais le retour après la mise ne fonctionne pas

function calcPriceAndQuantityFromLBS($price, $quantity, $unit_id, $lbs_in_a_bu, $lbs_in_w_bu) { 
    switch ($unit_id) { 
     case 8: // A Bushel 
      $outQ = $quantity/$lbs_in_a_bu; 
      $outP = $price * $lbs_in_a_bu; 
      return ['quantity' => number_format($outQ, 3, '.', ''), 'price' => number_format($outP, 8, '.', '')]; 
     case 10: // Pounds 
      $outQ = $quantity; 
      $outP = $price; 
      return ['quantity' => number_format($outQ, 3, '.', ''), 'price' => number_format($outP, 8, '.', '')]; 
     case 11: // CWT 
      $outQ = $quantity/LBS_IN_CWT; 
      $outP = $price * LBS_IN_CWT; 
      return ['quantity' => number_format($outQ, 3, '.', ''), 'price' => number_format($outP, 8, '.', '')]; 
     case 12: // Metric Tonne 
      $outQ = $quantity/LBS_IN_TON; 
      $outP = $price * LBS_IN_TON; 
      return ['quantity' => number_format($outQ, 3, '.', ''), 'price' => number_format($outP, 8, '.', '')]; 
     case 136: // W Bushel 
      $outQ = $quantity/$lbs_in_w_bu; 
      $outP = $price * $lbs_in_w_bu; 
      return ['quantity' => number_format($outQ, 3, '.', ''), 'price' => number_format($outP, 8, '.', '')]; 
    } 
} 

Mais celui-ci n'est pas? (retourner seulement case 136 converti prix/quantité) (return après le commutateur ne fonctionne pas) Comment puis-je améliorer à partir de celui ci-dessus, je veux utiliser moins de code pour faire la fonction ci-dessus, merci!

function calcPriceAndQuantityFromLBS($price, $quantity, $unit_id, $lbs_in_a_bu, $lbs_in_w_bu) { 
    switch ($unit_id) { 
     case 8: // A Bushel 
      $outQ = $quantity/$lbs_in_a_bu; 
      $outP = $price * $lbs_in_a_bu; 
     case 10: // Pounds 
      $outQ = $quantity; 
      $outP = $price; 
     case 11: // CWT 
      $outQ = $quantity/LBS_IN_CWT; 
      $outP = $price * LBS_IN_CWT; 
     case 12: // Metric Tonne 
      $outQ = $quantity/LBS_IN_TON; 
      $outP = $price * LBS_IN_TON; 
     case 136: // W Bushel 
      $outQ = $quantity/$lbs_in_w_bu; 
      $outP = $price * $lbs_in_w_bu; 
    } 
    return ['quantity' => number_format($outQ, 3, '.', ''), 'price' => number_format($outP, 8, '.', '')]; 
} 
+3

est votre omision de "pause" à l'intérieur de vous interrupteur déclaration cas intentionnel? Parce que dans son état actuel, peu importe la valeur de $ unit_id, le cas 136 va durer en dernier. – victor

+0

@victor oh wow droit. J'utilise toujours le retour avant, j'ai oublié d'utiliser le break. Merci! –

Répondre

4

Ajoutez l'instruction break; à la fin de chaque case. Sinon, le code du prochain case s de l'instruction switch sera également exécuté. Votre instruction return utilise des variables définies dans l'instruction switch. Si en quelque sorte $unit_id n'est pas dans la liste de case s, le return échouera en erreur. Pour éviter que le return de ne pas, vous pouvez ajouter ceci au bas de la liste des cas:

default: // $unit_id not found 
    return ['quantity' => '0.000', 'price' => '0.000']; // whatever you like 

Ou vous pourriez jeter une exception.

+0

oui, puisque j'utilise le retour tout le temps, oublie je dois utiliser pause, merci! –

+0

qui a été défoncé ce qui m'a sauté au premier abord, mais comment cela affecte-t-il la déclaration de retour qui ne fonctionne pas? – victor

+0

@ Code4R7 en fait le dernier a été exécuté ... hm –

2

Retour quitte la fonction alors dans votre cas agit comme une rupture, c'est pourquoi il fonctionne dans le premier cas.

+0

merci pour l'aide! –