PHP:为什么单管在这种情况下工作?

时间:2013-11-19 10:56:51

标签: php pipe

我有一个数组。考虑一下$a['info'] == 5。所以我可以写:

<?php echo $a['info'] . ' children'; ?>得到:“5个孩子”。

通常,我可以写

<?php echo (isset($a['info']) ? $a['info'] : '0') . ' children'; ?>

如果$a['info'] == 0或未设置,则

获取“0个孩子”。但

<?php echo ($a['info'] | '0') . ' children'; ?>也有效,但我不知道为什么。

非常感谢。

编辑:也适用于$a['info'] ?: '0'

2 个答案:

答案 0 :(得分:0)

echo ($a['info'] | '0')

这只是一个OR操作,它会像这样,0 OR 0 = 0,5 OR 0 = 5,所以你会得到正确的答案。

单管只不过是 OR操作

按位OR

答案 1 :(得分:0)

管道是字节或操作,所以

$val | 0 

等于

$val ? $val : 0

但是这段代码不检查变量是否存在,所以如果不存在 - 会引发NOTICE,但代码也会起作用,因为PHP boolean cast规范。

isset检查变量是否存在,如果它退出,即使它的值为0,isset也返回true,所以代码

echo (isset($a['info']) ? $a['info'] : '0') . ' children';

如果变量不退出,则回显“0个孩子”,而不是 0