2011-09-21 2 views
0

J'ai une fonction qui ressemble à quelque chose comme ceci:PHP: déclarations multiples dans une expression ternaire

function fun() 
{ 
    $pMana < 20 ? error(1) : $pMana -= 20; 
    //do stuff 
} 

Je veux quand la fonction d'erreur est appelée, elle permet également de quitter la fonction, quelque chose comme ça

function fun() 
{ 
    $pMana < 20 ? (error(1); return) : $pMana -= 20; //invalid syntax 
    //do stuff 
} 

Je n'ai pas encore vu d'expression ternaire capable de gérer plus d'une instruction comme celle-ci, mais je suis nouveau dans ce domaine. C'est possible?

+0

IDEA n'est pas valide pour empiler les ternaires –

Répondre

3

Utilisez la commande if dans cette situation.

L'opérateur ternaire est supposé renvoyer une seule valeur, d'où la restriction d'instruction unique. Vous n'êtes également pas censé utiliser des fonctions avec des effets secondaires significatifs dans l'opérateur ternaire. Ce que vous proposez conduit inévitablement à un code très illisible, vous devriez vous concentrer sur la lisibilité, pas sur le nombre de lignes/caractères. La plupart du code est lu beaucoup plus de fois qu'il est écrit/édité.

EDIT:

Vous pouvez également utiliser assert à des fins similaires. Cependant, les affirmations ne doivent jamais être utilisées pour gérer des situations courantes (telles que la validation des entrées utilisateur). La règle générale est que l'affirmation ayant échoué doit TOUJOURS indiquer un bogue dans votre code. Les expressions d'assertion doivent couvrir les hypothèses concernant la saisie d'autres parties de l'état du programme/programme au nom de la devise "Erreurs de capture dès que possible" (dans ce cas, elle serait utilisée pour empêcher les bugs de devenir négatifs, provoquant éventuellement des erreurs). plus tard).

+0

'assert' n'est pas' if', utilisez-le pour la version de débogage de votre code (seulement?). – hakre

+0

c'est très intéressant, pourquoi faut-il affirmer être pour le débogage seulement? – dukevin

+0

@dukevin Parce qu'il n'est pas vraiment transparent (surtout quand il s'agit de gérer des assertions). C'était juste un sugeston (le post d'OP suggère que le code est là pour gérer les situations d'erreur). –

0

L'opérateur ternaire est généralement utilisé pour affecter une valeur à une variable. L'instruction logique doit être utilisée avec "if".

Questions connexes