Discussion:
comparaison, variable et booléen
(trop ancien pour répondre)
Une Bévue
2012-04-19 06:35:02 UTC
Permalink
j'ai une ligne php qui assigne à une variable le contenu d'une
comparaison, j'ai fait ça comme ça :

$is_mac = ($mac_address == $imac_mac_address) true : false;

quand je fais :

echo "\$is_imac = $is_imac<br />";

j'obtiens :

$is_imac =

quand le résultat est faux

et :

$is_imac = 1

quand le résultat est vrai

normal ?

puis-je faire plus court, du genre :


$is_mac = ($mac_address == $imac_mac_address);

càd sans "? true : false" ???
Pierre Maurette
2012-04-19 16:43:18 UTC
Permalink
j'ai une ligne php qui assigne à une variable le contenu d'une comparaison,
$is_mac = ($mac_address == $imac_mac_address) true : false;
Il manque un '?', sans doute une typo. J'écris plutôt TRUE et FALSE
pour les constantes booléennes, mais ça ne doit pas changer quoi que de
soit.
echo "\$is_imac = $is_imac<br />";
Là, il y a une conversion d'un booléen en chaîne, cette conversion
donne:
TRUE -> '1'
FALSE -> ''
C'est comme ça, je n'en sais pas plus.
$is_imac =
quand le résultat est faux
$is_imac = 1
quand le résultat est vrai
normal ?
Oui.
$is_mac = ($mac_address == $imac_mac_address);
càd sans "? true : false" ???
Bien entendu, s'il s'agit d'affecter à $is_mac une valeur booléenne.
Ajouter le ? true : false; est même une redondance à la limite de la
faute.

En revanche, pour en faire qualque chose de plus facile à lire (et qui
accessoirement continuera dans beaucoup de cas à pouvoir être utilisé
comme un booléen, dans un test par exemple:
$is_mac = ($mac_address == $imac_mac_address)?1:0;
$is_mac = ($mac_address == $imac_mac_address)?'1':'0';
$is_mac = ($mac_address == $imac_mac_address)?'ben vrai, alors...':'ben
non...';

Vous pouvez garder votre variable sous forme booléenne, et juste pour
l'afficher utiliser l'opérateur ternaire:
print($is_mac?'1':'0');
print($is_mac?1:0);
ou alors utiliser (int)$is_mac, attention, (string)FALSE donne '', il
faudrait faire (string)(int)FALSE pour obtenir '0', il doit y avoir
plus simple.
Notez que le forçage (bool)expression peut s'écrire !!expression, il
n'y a pas de petite économie.
--
Pierre Maurette
Une Bévue
2012-04-19 19:06:13 UTC
Permalink
Post by Une Bévue
j'ai une ligne php qui assigne à une variable le contenu d'une
$is_mac = ($mac_address == $imac_mac_address) true : false;
Il manque un '?', sans doute une typo. J'écris plutôt TRUE et FALSE pour
les constantes booléennes, mais ça ne doit pas changer quoi que de soit.
Oui, le "?" était dans la source, par contre oui, je pense que c'est
plus judicieux TRUE / FALSE, ce sont des constantes pédéfinies.
Post by Une Bévue
echo "\$is_imac = $is_imac<br />";
TRUE -> '1'
FALSE -> ''
C'est comme ça, je n'en sais pas plus.
Bon, c'est à savoir, c'est tout.
Post by Une Bévue
$is_imac =
quand le résultat est faux
$is_imac = 1
quand le résultat est vrai
normal ?
Oui.
Post by Une Bévue
$is_mac = ($mac_address == $imac_mac_address);
càd sans "? true : false" ???
Bien entendu, s'il s'agit d'affecter à $is_mac une valeur booléenne.
Ajouter le ? true : false; est même une redondance à la limite de la faute.
OK
En revanche, pour en faire qualque chose de plus facile à lire (et qui
accessoirement continuera dans beaucoup de cas à pouvoir être utilisé
$is_mac = ($mac_address == $imac_mac_address)?1:0;
$is_mac = ($mac_address == $imac_mac_address)?'1':'0';
$is_mac = ($mac_address == $imac_mac_address)?'ben vrai, alors...':'ben
non...';
Vous pouvez garder votre variable sous forme booléenne, et juste pour
print($is_mac?'1':'0');
Vu, c'est + élégant...
print($is_mac?1:0);
ou alors utiliser (int)$is_mac, attention, (string)FALSE donne '', il
faudrait faire (string)(int)FALSE pour obtenir '0', il doit y avoir plus
simple.
Notez que le forçage (bool)expression peut s'écrire !!expression, il n'y
a pas de petite économie.
OK, merci bien pour cette réponse claire et précise !
Vincent Verdon
2012-04-19 19:29:54 UTC
Permalink
Bonsoir,
Post by Une Bévue
Oui, le "?" était dans la source, par contre oui, je pense que c'est
plus judicieux TRUE / FALSE, ce sont des constantes pédéfinies.
Pour être exact, ce sont des mots clefs du langage, dont le manuel
indique qu'ils sont insensibles à la casse. Les écrire en majuscule
n'est pas une mauvaise idée, ma foi !

Amicalement, Vincent Verdon
Clément
2012-04-20 21:30:29 UTC
Permalink
Post by Une Bévue
j'ai une ligne php qui assigne à une variable le contenu d'une
$is_mac = ($mac_address == $imac_mac_address) true : false;
L'opération ternaire est ici inutile.
$is_mac = $mac_address == $imac_mac_address;
suffirait ici.
Post by Une Bévue
echo "\$is_imac = $is_imac<br />";
$is_imac =
quand le résultat est faux
$is_imac = 1
quand le résultat est vrai
normal ?
ça s'appelle le transtypage. Plus d'infos dans la doc ici :
http://fr2.php.net/manual/fr/language.types.type-juggling.php

En gros false (le booléen) devient 0 (en int) et "" en string
Post by Une Bévue
$is_mac = ($mac_address == $imac_mac_address);
càd sans "? true : false" ???
cf le début ;)
Une Bévue
2012-04-21 07:49:17 UTC
Permalink
Post by Clément
L'opération ternaire est ici inutile.
$is_mac = $mac_address == $imac_mac_address;
suffirait ici.
OK, merci bien, si je comprends bien, il n'est même pas utile de
parenthéser :

$is_mac = ($mac_address == $imac_mac_address);

?
Clément
2012-04-21 21:07:52 UTC
Permalink
Post by Une Bévue
Post by Clément
L'opération ternaire est ici inutile.
$is_mac = $mac_address == $imac_mac_address;
suffirait ici.
OK, merci bien, si je comprends bien, il n'est même pas utile de
$is_mac = ($mac_address == $imac_mac_address);
?
Effectivement, $is_mac = $mac_address == $imac_mac_address; fonctionne.
Mais est-ce très lisible ? :)
Une Bévue
2012-05-01 06:09:53 UTC
Permalink
Post by Clément
Effectivement, $is_mac = $mac_address == $imac_mac_address; fonctionne.
Mais est-ce très lisible ? :)
bonne remarque ;-)

Loading...