comparaison, variable et booléen

Le
Une Bévue
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" ???
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pierre Maurette
Le #24414951
Une Bévue :
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;



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.

quand je fais :

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.

j'obtiens :

$is_imac >
quand le résultat est faux

et :

$is_imac = 1

quand le résultat est vrai

normal ?



Oui.

puis-je faire plus court, du genre :


$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
Le #24415731
Le 19/04/2012 18:43, Pierre Maurette a écrit :
Une Bévue :
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;



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.

quand je fais :

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.



Bon, c'est à savoir, c'est tout.

j'obtiens :

$is_imac >>
quand le résultat est faux

et :

$is_imac = 1

quand le résultat est vrai

normal ?



Oui.

puis-je faire plus court, du genre :


$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é
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');



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
Le #24415801
Bonsoir,

Le 19/04/2012 21:06, Une Bévue a écrit :

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
Le #24418911
Le 19/04/2012 08:35, Une Bévue a écrit :
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;




L'opération ternaire est ici inutile.
$is_mac = $mac_address == $imac_mac_address;
suffirait ici.

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 ?



ç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
puis-je faire plus court, du genre :


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

càd sans "? true : false" ???


cf le début ;)
Une Bévue
Le #24419541
Le 20/04/2012 23:30, Clément a écrit :

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
Le #24421411
Le 21/04/2012 09:49, Une Bévue a écrit :
Le 20/04/2012 23:30, Clément a écrit :

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);

?


Effectivement, $is_mac = $mac_address == $imac_mac_address; fonctionne.
Mais est-ce très lisible ? :)
Une Bévue
Le #24442431
Le 21/04/2012 23:07, Clément a écrit :



Effectivement, $is_mac = $mac_address == $imac_mac_address; fonctionne.
Mais est-ce très lisible ? :)



bonne remarque ;-)
Publicité
Poster une réponse
Anonyme