PHP - заставить bool выводить ложь, когда ложь

172

Следующий код ничего не распечатывает:

$bool_val = (bool)false;
echo $bool_val;

Но следующий код печатает 1:

$bool_val = (bool)true;
echo $bool_val;

Есть ли лучший способ печати 0или falseкогда $bool_valэто falseчем добавление ifзаявления?

Anonymous1
источник
5
Если это для отладки, попробуйте var_dump вместо echo.
Марк Э. Хаас
1
(bool)Литой является излишней, вы не должны литым BOOL BOOL к: (bool) true === true.
Джон Суррелл
Есть ли способ настроить PHP так, что echo 0==1;выводит 0или false?
Марио

Ответы:

250
echo $bool_val ? 'true' : 'false';

Или, если вы хотите вывод, только когда он ложен:

echo !$bool_val ? 'false' : '';
Дэн Гроссман
источник
86
Это сбивает с толку, растягивается и бесполезно без какой-либо очевидной выгоды. Я программирую уже более 20 лет и никогда не хотел, чтобы «false» автоматически конвертировался в пустые… ноль много раз, но никогда «false». Моя разработка на Java / Spring / Hibernate настолько чище и эффективнее, чем даже скромные PHP-системы. Я мог найти много людей, которые были сбиты с толку .. stackoverflow.com/questions/9042002/… но я не мог найти никаких ссылок относительно реальной причины для этой "особенности" дизайна.
Томас W,
3
Я действительно хотел поспорить, почему (строка) FALSE == "" - хорошая идея, основанная на этом бите из документации PHP: "Булево значение TRUE преобразуется в строку" 1 ". Булево значение FALSE преобразуется в" "(пустой string). Это позволяет преобразовывать логические и строковые значения туда и обратно. " но я проверил это, и (bool) "0" также оценивается как ЛОЖЬ, так что ... я не знаю. Я люблю PHP, но не могу отрицать, что это «странно» _ _>
Бен
7
Это не странно FALSE == ''. Это совершенно справедливо и часть других языков, в том числе javascript. Что странно, так это то, что FALSE по умолчанию использует пустую строку. По умолчанию должно быть 0. Всегда. Тем более что TRUE всегда будет по умолчанию 1. Это нарушает кардинальное правило программирования. Держите ваш код в соответствии. Это явно ошибка.
Литерфор
1
Хотя это самый простой способ сделать это, запустив массив через print_r, который содержит логические значения, эти значения будут отображаться пустыми, если вы ранее не запускали массив через цикл, который их поменял, поэтому если вы просто пытаетесь отлаживать или регистрировать это становится гигантской болью в шее, чтобы увидеть, являются ли значения на самом деле истинными или ложными, или что-то еще, что выглядит пустым.
Дейв Хек
2
@Ben, хотя !! '0'оценивает falseв PHP, это trueв JS. !! ""ложно в JS и PHP.
Чарли
64

Это самый простой способ сделать это:

$text = var_export($bool_value,true);
echo $text;

или

var_export($bool_value)

Если второй аргумент неверен, он выведет результат напрямую.

Саад
источник
34

Нет, поскольку другой вариант - модификация движка Zend, и трудно было бы назвать это «лучшим способом».

Редактировать:

Если вы действительно хотите, вы можете использовать массив:

$boolarray = Array(false => 'false', true => 'true');
echo $boolarray[false];
Игнасио Васкес-Абрамс
источник
3
Это странный способ сделать это, потому что ключи массива не могут быть типами bool. PHP преобразует это в массив (0 => 'false', 1 => 'true').
Марк Э. Хаас,
66
@mehaase: я давно перестал пытаться применять какую-либо логику к обработке типов в PHP. Я просто воспринимаю это как есть.
Игнасио Васкес-Абрамс
33

Это выведет логическое значение как есть, вместо 1/0.

    $bool = false;

    echo json_encode($bool);   //false
serdar.sanri
источник
1
Отличный ответ, особенно если вам нужен именно этот логический тип в JSON!
Барт
1
это лучший ответ
Shady Sherif
21

Попробуйте преобразовать ваш логический в целое число?

 echo (int)$bool_val;
Яник Рошон
источник
Ха ... просто. Отлично.
Mere Development
21

Мне нравится этот, чтобы распечатать это

var_dump ($var);
akond
источник
15

var_export обеспечивает желаемую функциональность.

Это всегда будет печатать значение, а не печатать ничего для nullили false. var_exportпечатает PHP-представление передаваемого аргумента, вывод может быть скопирован / вставлен обратно в PHP.

var_export(true);    // true
var_export(false);   // false
var_export(1);       // 1
var_export(0);       // 0
var_export(null);    // NULL
var_export('true');  // 'true'   <-- note the quotes
var_export('false'); // 'false'

Если вы хотите напечатать строки "true"или "false", вы можете привести к логическому значению, как показано ниже, но остерегайтесь особенностей:

var_export((bool) true);   // true
var_export((bool) false);  // false
var_export((bool) 1);      // true
var_export((bool) 0);      // false
var_export((bool) '');     // false
var_export((bool) 'true'); // true
var_export((bool) null);   // false

// !! CAREFUL WITH CASTING !!
var_export((bool) 'false'); // true
var_export((bool) '0');     // false
Джон Суррелл
источник
4
echo(var_export($var)); 

Когда $varэто логическая переменная, trueили falseбудет распечатан.

mohamedeimo
источник
На мой взгляд, лучшее решение при экспорте переменных PHP в JavaScript!
RPDeshaies 30.09.14
3
Это немного вводит в заблуждение. var_exportв этом случае будет эхо его результат и возврат нуля, так var_export выводит true || false, и echoэто эхо null( ''). Чтобы вернуть вывод из var_export, вам нужно предоставить второй параметр как true.
Джон Суррелл
@RPDeshaies, если вы хотите экспортировать переменные php в javascript json_encode, это лучший вариант.
andho
3

Вы можете использовать троичный оператор

echo false ? 'true' : 'false';
Аарон Хэтэуэй
источник
3

%bВариант Sprintf () преобразует логическое значение в целое число:

echo sprintf("False will print as %b", false); //False will print as 0
echo sprintf("True will print as %b", true); //True will print as 1

Если вы не знакомы с ней: вы можете дать этой функции произвольное количество параметров, в то время как первая должна быть вашей выходной строкой, дополненной замещающими строками, такими как %bили %sдля обычной замены строк.

Каждый шаблон будет заменен аргументом в следующем порядке:

echo sprintf("<h1>%s</h1><p>%s<br/>%s</p>", "Neat Headline", "First Line in the paragraph", "My last words before this demo is over");
Nuala
источник
2

json_encode сделает это из коробки, но это не красиво (с отступом и т. д.):

echo json_encode(array('whatever' => TRUE, 'somethingelse' => FALSE));

... дает ...

{"whatever":true,"somethingelse":false}
Гарри Пехконен
источник
0
function dump_condition($condition){
    if($condition){
        return "true";
    } else {
        return "false";
    }
 }

использовать по сценарию

echo dump_condition(1>0); // print "true"

echo dump_condition(1<0); // print "false"
Оскар Заррус
источник
0

Вы приводите логическое значение к логическому и ожидаете, что будет показано целое число. Это работает, trueно не ложь. Так как вы ожидаете целое число:

echo (int)$bool_val;
AbraCadaver
источник