web-dev-qa-db-ja.com

PHP印刷されたブール値が空です、なぜですか?

PHPは初めてです。スクリプトを実装していますが、次のことに戸惑っています。

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

echo $local_rates_file_exists."<br>";

このコードは、0または1(またはtrueまたはfalse)ではなく、空の文字列を表示します。どうして?ドキュメントには、ブール値が常に0または1であることが示されているようです。この背後にあるロジックは何ですか?

35

ブール値で前後に変換するときは注意してください、マニュアルには次のように書かれています:

ブールのTRUE値は文字列「1」に変換されます。ブール値FALSEは ""(空の文字列)に変換されます。これにより、ブール値と文字列値の間で相互に変換できます。

したがって、次のことを行う必要があります。

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

ブール値を文字列に変換することについて、 マニュアル実際にはが言う

ブール値[〜#〜] true [〜#〜]の値は文字列 "1"に変換されます。ブール[〜#〜] false [〜#〜]は ""(空の文字列)に変換されます。これにより、ブール値と文字列値の間で相互に変換できます。

ブール値は常に1または0としてで表すことができますが、それを文字列に変換したときに得られるものではありません。

整数として表現したい場合は、 1にキャスト

$intVar = (int) $boolVar;
23
DaveRandom

結果は、例のように使用すると、phpがbool値を暗黙的に文字列に変換するという事実から来ています。 (string)falseは空の文字列を与え、(string)true'1'。これは、'' == falseおよび'1' == true

1
clime

戻り値の型がtrue/falseまたは0/1かどうかわからないときにファイルが存在するかどうかを確認する場合は、===を使用できます。

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