web-dev-qa-db-fra.com

PHP la valeur booléenne imprimée est vide, pourquoi?

Je suis nouveau sur PHP. J'implémente un script et je suis perplexe par ce qui suit:

$local_rate_filename = $_SERVER['DOCUMENT_ROOT']."/ghjr324l.txt";
$local_rates_file_exists = file_exists($local_rate_filename);

echo $local_rates_file_exists."<br>";

Ce morceau de code affiche une chaîne vide, plutôt que 0 ou 1 (ou vrai ou faux). Pourquoi? La documentation semble indiquer qu'une valeur booléenne est toujours 0 ou 1. Quelle est la logique derrière cela?

35
Jérôme Verstrynge

Soyez prudent lorsque vous convertissez en avant et en arrière avec booléen, le manuel dit:

Une valeur booléenne TRUE est convertie dans la chaîne "1". Boolean FALSE est converti en "" (la chaîne vide). Cela permet une conversion dans les deux sens entre les valeurs booléennes et les chaînes.

Vous devez donc faire:

echo (int)$local_rates_file_exists."<br>";
46
dynamic

A propos de la conversion d'un booléen en chaîne, le manuel en fait dit :

Une valeur booléenne [~ # ~] true [~ # ~] est convertie en la chaîne "1". Boolean [~ # ~] false [~ # ~] est converti en "" (la chaîne vide). Cela permet une conversion dans les deux sens entre les valeurs booléennes et les chaînes.

Un booléen peut toujours être représenté sous la forme d'un 1 ou d'un 0, mais ce n'est pas ce que vous obtenez lorsque vous le convertissez en chaîne.

Si vous voulez qu'il soit représenté sous forme d'entier, transformez-le en un :

$intVar = (int) $boolVar;
23
DaveRandom

Les résultats proviennent du fait que php convertit implicitement les valeurs booléennes en chaînes s'il est utilisé comme dans votre exemple. (string)false donne une chaîne vide et (string)true donne '1'. Cela est cohérent avec le fait que '' == false et '1' == true.

1
clime

Si vous voulez vérifier si le fichier existe alors que vous n'êtes pas sûr que le type de retour soit vrai/faux ou 0/1, vous pouvez utiliser ===.

if($local_rates_file_exists === true)
{
   echo "the file exists";
}
else
{
   echo "the doesnt file exists";
}
0
Bjørn Thomsen