2010-11-25 7 views
0

hey les gars, je suis confondu avec ceci:et ou opérateur php question?

forceAnim: <?php echo (is_singular() || $iphone) ? 0 : 1; ?> 

j'ai ce paramètre forceAnim dans une fonction qui pourrait être 0 ou 1. is_singular signifie qu'un type spécifique de page est affichée $ moyen iphone c'est vu sur l'iphone.

Je veux que forceAnmi soit TOUJOURS à 0 s'il est visualisé sur l'iphone et en plus je veux que forceAnim soit 0 si is_singular retourne vrai.

quel est le truc? actuellement si une page singulière est affichée sur l'iphone forceAnim est 1.

concernant mat

modifier:

echo $iphone; //returns 1 only if on iphone 
echo is_singular(); //returns 1 only if i'm on a singular page 

les deux vars retournent 1 mais juste si elles sont vraies. donc si je suis sur l'iphone $ iphone renvoie 1, mais si je ne suis pas sur l'iphone $ iphone ne retourne pas anythin (pas 0) la même chose s'applique à is_singular()!

+0

ce code semble bon, vous sûr que votre code d'iphone $ est juste? – sjobe

Répondre

0

Il suffit de remplacer les deux opérandes: ($iphone || is_sungular()) ? 0 : 1.

OR L'opérateur n'exécute pas le deuxième opérande si le premier est vrai. Cela signifie que si $iphone est vrai, alors is_singular() ne sera pas exécuté.

+1

Ceci n'est pas une solution, mais le rend un peu plus rapide. –

+0

Il renverra '0' si quelqu'un visite l'iPhone, et sinon le résultat de' is_singular' déterminera quelle valeur afficher. Il me semble que c'est ce que l'OP voulait ... – Crozin

+0

Mais 'is_singular' devrait être une fonction idempotente sans effet secondaire. Ainsi, peu importe la position dans laquelle il est placé dans une expression OR. – Gumbo

0

Essayez de mettre l'intégralité de l'instruction ternaire entre parenthèses. Les règles de priorité de l'opérateur de PHP provoqueront l'écho en écho les résultats de l'if() partie de la déclaration, plutôt que les résultats de l'if():

forceAnim: <?php echo ((is_singular() || $iphone) ? 0 : 1); ?> 
         ^-add this       ^-and this 
+0

() = parenthèses, entre parenthèses = [] – GreenMatt

+0

Mettre l'expression entre parenthèses n'est pas nécessaire: 'a == (a) == ((a)) == (((a))) == ...'. – Gumbo

0

La syntaxe est correcte. Vous devriez vérifier la valeur de retour de "is_singular" et la valeur dans $ iphone, puisque les deux semblent "évaluer" (!) À (boolean) faux. Puisque PHP est un langage faiblement typé et que vous utilisez ces variables dans un contexte booléen (le ||), ils sont convertis en bool - et les deux sont convertis en faux, ce qui entraîne un (int) 1 comme résultat de votre expression - est de nouveau converti silencieusement en (chaîne) 1, puisque "echo" est un contexte de chaîne.

1

Comme d'autres l'ont souligné, assurez-vous de vérifier ce qui est retourné pour is_singular() et quelle est la valeur de $iphone. Ce pourrait être les valeurs ne sont pas ce que vous attendez qu'ils soient.

Sur une note côté, qu'en "simplifier" avec quelque chose comme

forceAnim: <?php echo (int)(is_singular() || $iphone); ?>