Article mis à jour le : 05-05-2022
Explications sur les notions de booleens et de conditions en PHPSouvent je vois des erreurs de codage, bêtes, ou des personnes qui ont appris que PHP étant faiblement typé et permet de déclarer des variables n'importe où, se retrouvent "coincées" dans le cas de scripts pourtant basiques.
Voici donc un petit rappel sur la notion des booléans, de tests de conditions.
Nous allons essayer de voir tous les cas de figure :
Tout d'abord, testons les conditions :
$varA = 0;
$varB = 1;
$varC = false;
$varD = true;
$varE = null;
if($varA){
echo '<br/>A est vrai;';
}else{
echo '<br/>A est faux;';
}
if($varB){
echo '<br/>B est vrai;';
}else{
echo '<br/>B est faux;';
}
if($varC){
echo '<br/>C est vrai;';
}else{
echo '<br/>C est faux;';
}
if($varD){
echo '<br/>D est vrai;';
}else{
echo '<br/>D est faux;';
}
if($varE){
echo '<br/>E est vrai;';
}else{
echo '<br/>E est faux;';
}
if($varF){
echo '<br/>F est vrai;';
}else{
echo '<br/>F est faux;';
}
Le résultat de l'execution du script nous donnera :
A est faux;
B est vrai;
C est faux;
D est vrai;
E est faux;
( ! ) Notice: Undefined variable: varF in C:\wamp\www\Test\Web\index.php on line 46
Call Stack
# Time Memory Function Location
1 0.0005 241184 {main}( ) ..\index.php:0
F est faux;
A noter que l'affichage du message d'erreur dépend du paramétrage de votre serveur. C'est pour cela que les "petits nouveaux" de PHP ne comprennent pas pourquoi parfois des erreurs apparaissent, d'autres fois non... En fait, il faut être clair, c'est une mauvaise pratique que de tester une variable qui n'existe pas, ce n'est pas du tout propre ni maintenable comme code!
Donc un petit tableau récapitulatif :
Test si vrai :
Contenu de la variable | Valeur logique |
0 | False |
1 | True |
True | True |
False | False |
Null | False |
Variable Non existante | False |
Maintenant, rentrons dans le détail, refaisons notre script avec un simple comparateur == comme on le voit dans 95% des scripts qui trainent à droite à gauche. Vous remarquez que j'ai modifié chaque cas : à présent :
C'est parti !
if($varA == true){
echo '<br/>A est vrai;';
}elseif($varA == false){
echo '<br/>A est faux;';
}else{
echo '<br/>A n\'est ni vrai ni faux;';
}
if($varB == true){
echo '<br/>B est vrai;';
}elseif($varB == false){
echo '<br/>B est faux;';
}else{
echo '<br/>B n\'est ni vrai ni faux;';
}
if($varC == true){
echo '<br/>C est vrai;';
}elseif($varC == false){
echo '<br/>C est faux;';
}else{
echo '<br/>C n\'est ni vrai ni faux;';
}
if($varD == true){
echo '<br/>D est vrai;';
}elseif($varD == false){
echo '<br/>D est faux;';
}else{
echo '<br/>D n\'est ni vrai ni faux;';
}
if($varE == true){
echo '<br/>E est vrai;';
}elseif($varE == false){
echo '<br/>E est faux;';
}else{
echo '<br/>E n\'est ni vrai ni faux;';
}
if($varF == true){
echo '<br/>F est vrai;';
}elseif($varF == false){
echo '<br/>F est faux;';
}else{
echo '<br/>F n\'est ni vrai ni faux;';
}
Résultat :
A est faux;
B est vrai;
C est faux;
D est vrai;
E est faux;
( ! ) Notice: Undefined variable: varF in C:\wamp\www\Test\Web\index.php on line 56
Call Stack
# Time Memory Function Location
1 0.0011 243776 {main}( ) ..\index.php:0
( ! ) Notice: Undefined variable: varF in C:\wamp\www\Test\Web\index.php on line 58
Call Stack
# Time Memory Function Location
1 0.0011 243776 {main}( ) ..\index.php:0
F est faux;
Le résultat ne change pas! Vous remarquerez la double erreur, c'est normal, je vérifie deux fois ma variable (si elle vaut vrai puis si elle vaut faux).
Comparaison avec double égal == :
Contenu de la variable | Valeur logique |
0 | False |
1 | True |
True | True |
False | False |
Null | False |
Variable Non existante | False |
Maintenant, pour terminer, on va corser le système, est montrer ce qu'est la rigueur, et que PHP peut être lui aussi très pointilleux : nous allons comparer avec le triple égal, ===, qui vérifie valeur et type!
A n'est ni vrai ni faux;
B n'est ni vrai ni faux;
C est faux;
D est vrai;
E est faux;
( ! ) Notice: Undefined variable: varF in C:\wamp\www\Test\Web\index.php on line 56
Call Stack
# Time Memory Function Location
1 0.0016 243776 {main}( ) ..\index.php:0
( ! ) Notice: Undefined variable: varF in C:\wamp\www\Test\Web\index.php on line 58
Call Stack
# Time Memory Function Location
1 0.0016 243776 {main}( ) ..\index.php:0
F est faux;
Un peu de changement : on remarque que les variables qui valent 0 ou 1 ne sont plus dans le coup de la comparaison, et on remarque aussi que null ou undefined reviennent toujours à false !
Comparaison avec triple égal === :
Contenu de la variable | Valeur logique |
0 | Aucune |
1 | Aucune |
True | True |
False | False |
Null | False |
Variable Non existante | False |