PHP - 当值为false时,如何使bool类型输出false

217
以下代码没有输出任何内容:
$bool_val = (bool)false;
echo $bool_val;

但是以下代码会打印1:

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

如果$bool_val为false,有没有比添加一个if语句更好的方法来打印0或false?


8
如果这是用于调试,建议使用 var_dump 而不是 echo。 - Mark E. Haase
1
(bool)转换是多余的,你不需要将bool强制转换为bool:(bool) true === true - Jon Surrell
2
有没有一种方法可以配置PHP,使得 echo 0==1; 输出 0false - mario
14个回答

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

或者,如果你只想在它为假的时候输出:

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

127
这段话意思是: 这个功能令人困惑、冗长、并且没有任何明显的好处。我已经编程20多年了,从来没有想过将“false”自动转换为空白...很多次是null,但从未是“false”。我的Java/Spring/Hibernate开发比即使是一般的PHP系统都更加干净、强大。我可以找到很多被困惑的人,但我找不到任何关于这种设计“特点”的真正原因的参考资料。 - Thomas W
8
我很想争论为什么基于PHP文档中的这段话:“布尔值TRUE转换为字符串“1”。布尔值FALSE转换为空字符串“”(空字符串)。这允许来回在布尔和字符串值之间进行转换。”(string)FALSE == ""是一个好主意,但我测试了一下,(bool)"0"也会被评估为FALSE,所以...我不知道。虽然我喜欢PHP,但我不能否认这有点奇怪 >_> - Ben
13
FALSE == '' 并不奇怪。在其他编程语言中,包括JavaScript在内,这是完全有效的。奇怪的是,FALSE 的默认值是空字符串。它应该默认为0。始终如此。特别是因为TRUE将始终默认为1。这违反了编程的一个基本规则:保持代码一致性。这显然是一个bug。 - Literphor
3
虽然这是最简单的方法,即将包含布尔值的数组通过print_r运行,但这些值将显示为空白,除非您先将数组通过循环交换它们,因此,如果您只是尝试调试或记录,那么查看值是否实际为true、false或其他空白外观的内容将变得非常麻烦。 - Dave Heq
2
@Ben 尽管在 PHP 中 !! '0' 的值为 false,但在 JS 中它的值为 true。而 !! "" 在 JS 和 PHP 中都是 false - Charlie

85

这是最简单的方法:

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

如果第二个参数不为真,它将直接输出结果。


1
谢谢。没有必要让一个愚蠢的语言变得更奇怪。即使在 PHP 中,也有解决方法可以让它变得还算可以接受。 - ThaJay

54
这将打印布尔值本身,而不是 1/0。
    $bool = false;

    echo json_encode($bool);   //false

1
非常好的答案,特别是如果你需要在JSON中确切地使用那个布尔值! - bart
2
这是最好的答案。 - Shady Mohamed Sherif
简单而有效!我需要这个来处理一些GraphQL。 - JoshHighland

34
不,因为另一种选择是修改Zend引擎,而人们很难称之为“更好的方法”。 编辑: 如果您真的想这样做,可以使用一个数组:
$boolarray = Array(false => 'false', true => 'true');
echo $boolarray[false];

4
这种方法很奇怪,因为数组键不能是布尔类型。PHP会将其转换为array(0 => 'false', 1 => 'true')。 - Mark E. Haase
67
我早就停止了对 PHP 类型处理逻辑的尝试,现在我只是按照它的方式去使用它。 - Ignacio Vazquez-Abrams

25

var_export提供了所需的功能。

这将始终打印一个值,而不是对于nullfalse什么都不打印。 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

23

我喜欢这个来打印输出

var_dump ($var);

23
尝试将您的布尔值转换为整数?
 echo (int)$bool_val;

哈哈...简单。完美。 - Mere Development

6

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

6
echo(var_export($var)); 

$var是布尔变量时,将打印出truefalse


在我看来,将 PHP 变量导出到 JavaScript 的最佳解决方案是! - RPDeshaies
4
有点误导。在这种情况下,var_export将输出其结果并返回null,因此var_export正在输出true || false,而echo正在回显null('')。要返回从var_export输出的内容,需要提供第二个参数作为true - Jon Surrell
@RPDeshaies 如果你想将PHP变量导出到JavaScript中,json_encode是一个更好的选择。 - andho

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接