2009-07-16 9 views
0

Dans d'autres langages de programmation (Python, Ruby, Scheme), je suis habitué à faire des choses commeEn php, comment les opérateurs logiques fonctionnent-ils avec des non-booléens?

$foo = $cat && $dog; 
$bar = $fruit || $vegetable; 

j'attendre à ce que $ foo obtiendrait attribué à chien $ si le chat $ étaient nuls, et la barre de $ à $ fruit si $ fruit n'était PAS nul. Je me rappelle avoir été brûlé pour avoir fait des choses comme ça en PHP, et je n'ai jamais appris exactement comment les opérateurs logiques traitent les opérandes non-booléens. Quelqu'un peut-il m'expliquer ou me diriger dans la bonne direction? J'ai essayé de lire la page suivante dans les documents officiels, mais il ne traite pas non booléens:

http://us3.php.net/manual/en/language.operators.logical.php

+0

J'ai aussi lu la page sur le type de jonglage (http://us.php.net/manual/fr/language.types.type-juggling.php), et cela n'a pas encore éclairci le problème pour moi. – allyourcode

Répondre

6

En PHP le résultat d'une comparaison booléenne est toujours un booléen, les opérandes sont contraints à booléen .

http://us3.php.net/manual/en/language.types.boolean.php

explique que les valeurs, quand ils sont sous la contrainte, ne devient vrai ou faux.

+0

Merci, tialaramex. Est-il juste de dire que mon premier exemple est équivalent à $ foo = ((boolean) $ cat) && ((booléen))? – allyourcode

+0

Je crois que c'est une caractérisation précise, mais je ne l'ai pas testé intensivement donc je ne peux pas promettre qu'il n'y a pas de plis. – tialaramex

+0

Où est-il dit que les expressions d'opération logique évaluent toujours à un booléen? – allyourcode

2

Cela fonctionnerait-il pour vous?

$ foo = $ cat? $ cat: $ chien;

Le premier $ chat sera transformé en un booléen basé sur des règles connues. Si c'est vrai alors $ foo sera $ chat sinon c'est $ dog.

+0

Oui, mais c'est moche. – allyourcode

+0

@allyourcode Cherchez le soi-disant "opérateur Elvis", alors. – Blackhole