PHP-获取布尔值以在false时返回false


172

以下代码不会输出任何内容:

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

但是下面的代码打印1

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

有没有更好的方式来打印0false$bool_valfalse不是增加一个if声明?


5
如果这是用于调试,请尝试使用var_dump而不是echo。
Mark E. Haase

1
(bool)投是多余的,你不需要投BOOL到布尔:(bool) true === true
乔恩·苏雷尔

有没有一种方法可以配置PHP以便 echo 0==1;输出0false
马里奥

Answers:


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

或者,如果您只想在为假时输出:

echo !$bool_val ? 'false' : '';

85
没有任何明显的好处,这令人困惑,无所适从和无益。我已经编程20多年了,从来没有想过'false'自动转换为空白。很多时候都为null,但是从来没有'false'。我的Java / Spring / Hibernate开发比普通的PHP系统更加整洁和强大。我会发现很多人感到困惑。.stackoverflow.com/ questions/9042002/… 但是我找不到关于这种设计“功能” 的真正原因的任何参考。
Thomas W

3
我真的很想争论为什么(string)FALSE ==“”是基于PHP文档中的这一点的一个好主意:“布尔TRUE值转换为字符串” 1“。布尔值FALSE转换为”“(空字符串)。这允许在布尔值和字符串值之间来回转换。” 但是我测试了一下,(布尔)“ 0”也等于FALSE,所以...我不知道。我爱PHP,但我不能否认那有点“怪异”> _>
2013年

7
那不奇怪FALSE == ''。它是完全有效的,并且是其他语言(包括javascript)的一部分。奇怪的是FALSE默认为空字符串。它应默认为0。始终。特别是因为TRUE将始终默认为1。这违反了编程的基本规则。保持您的代码一致。这显然是一个错误。
Literphor 2014年

1
尽管这是最简单的方法,但通过包含布尔值的print_r运行一个数组,这些值将显示为空白,除非您之前通过交换它们的循环来运行该数组,所以如果您只是尝试调试或记录日志,看看这些值是真是假,或者其他什么看起来很空白,这真是一个大难题。
Dave Heq

2
@Ben虽然在PHP中!! '0'评估为false,但true在JS中。!! ""在JS和PHP中为false。
查理

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
这是一种奇怪的方法,因为数组键不能是布尔类型。PHP会将其强制转换为array(0 =>'false',1 =>'true')。
Mark E. Haase

66
@mehaase:我很久以前就停止尝试对PHP的类型处理应用任何形式的逻辑。我就随它去。
Ignacio Vazquez-Abrams,

32

这将按原样打印布尔值,而不是1/0。

    $bool = false;

    echo json_encode($bool);   //false

1
很好的答案,特别是如果您确实需要JSON中的布尔值!
巴特

1
这是最好的答案
Shady Sherif



15

var_export 提供所需的功能。

这将始终打印一个值,而不是为null或不打印任何内容falsevar_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)); 

when $var是布尔变量,true否则false将被打印出来。


我认为,这是在JavaScript中导出PHP变量时的最佳解决方案!
RPDeshaies 2014年

3
这有点误导。var_export在这种情况下,将回显其结果并返回null,因此var_export输出true || false,并echo回显null'')。要从中返回输出var_export,您需要提供第二个参数作为true
乔恩·瑟雷尔

@RPDeshaies如果您想将php变量导出到javascript json_encode是一个更好的选择。
andho


3

sprintf()%b选项会将布尔值转换为整数:

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");

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

您将boolean转换为boolean并期望显示整数。它适用于true但不是错误的。由于您期望一个整数:

echo (int)$bool_val;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.