Я пытаюсь напечатать следующее заявление:
print false . "\n" . true . "\n"; echo false . (bool)false . "\n" . true . "\n"; print "0" . "\n" . true . "\n";
Результат, который я получаю, – всего лишь «1 1 0 1». Ожидаемый результат:
0
1
0
1
0
1
Я использую PHP 5.4.3 MSVC9 x64 Может кто-нибудь объяснить, почему и как я могу сделать это печатать правильный путь?
Это должно сделать трюк. Используйте массив.
$boolarray = Array(false => 'false', true => 'true'); echo $boolarray[false]," ", $boolarray[true];
Выход: false true
Ваша проблема возникает из-за вашего заблуждения оператора +
в строках в PHP. Оператор конкатенации строк .
поскольку PHP свободно набирается, он не знает, хотите ли вы конкатцировать или добавить строки.
Я сломаю это для вас:
print false + "\n" + true + "\n"; echo false+(bool)false + "\n" + true + "\n"; print "0" + "\n" + true + "\n";
Во-первых, вы можете захотеть выбрать echo
или print
. Теперь, вперед:
print false + "\n" + true + "\n";
Строки PHP, при добавлении (без контакта) , оцениваются в 0
. Поэтому это утверждение оценивается следующим образом:
print 0 + 0 + 1 + 0;
который равен 1
. Остальные следуют этому примеру. Если вы хотите, чтобы ваш код работал, вы должны использовать оператор конкатенации ( .
). Если вы хотите написать True
или False
как это делает .NET, вы можете написать простую функцию:
function writeBool($var) { echo ($var) ? "True" : "False"; }
В соответствии с быстрым набором текста PHP (который отстой, если вы спросите меня), все, что будет оцениваться в true
, будет писать «True». Я бы по-прежнему отказывался от использования функции для этого, поскольку вызовы функций на PHP являются дорогостоящими .