PHP печатное логическое значение пусто, почему? - PullRequest
33 голосов
/ 28 января 2012

Я новичок в 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 (или истину или ложь). Зачем? Документация, кажется, указывает, что логическое значение всегда 0 или 1. Какая логика стоит за этим?

Ответы [ 4 ]

43 голосов
/ 28 января 2012

Будьте внимательны, когда вы переводите назад и вперед с логическим значением, в руководстве говорится:

Логическое значение TRUE преобразуется в строку «1».Логическое значение ЛОЖЬ преобразуется в "" (пустая строка).Это позволяет выполнять преобразование между логическими и строковыми значениями туда и обратно.

Так что вам нужно выполнить:

echo (int)$local_rates_file_exists."<br>";
22 голосов
/ 28 января 2012

О преобразовании логического значения в строку, руководство на самом деле говорит :

Логическое ИСТИНА значение преобразуется в строку "1". Логическое значение FALSE преобразуется в "" (пустая строка). Это позволяет преобразовывать между логическими и строковыми значениями взад и вперед.

Логическое значение всегда может быть представленным как 1 или 0, но это не то, что вы получаете, когда конвертируете его в строку.

Если вы хотите, чтобы оно было представлено как целое число, приведите его к одному :

$intVar = (int) $boolVar;
1 голос
/ 28 января 2012

Результаты получены благодаря тому факту, что php неявно преобразует значения bool в строки, если они используются, как в вашем примере.(string)false дает пустую строку, а (string)true дает '1'.Это согласуется с тем, что '' == false и '1' == true.

0 голосов
/ 28 января 2012

Если вы хотите проверить, существует ли файл, если вы не уверены, что тип возвращаемого значения - true / false или 0/1, вы можете использовать ===.

if($local_rates_file_exists === true)
{
   echo "the file exists";
}
else
{
   echo "the doesnt file exists";
}
...