PHP中的true / false如何工作?

时间:2010-03-04 20:27:43

标签: php

我想知道PHP如何在内部处理 true / false 比较。 我知道true定义为1,false定义为0。 当我if("a"){ echo "true";}时,它会回复“ true ”。 PHP如何将“a”识别为1?

6 个答案:

答案 0 :(得分:89)

booleanstype comparison tables的PHP文档中介绍了这一点。

转换为布尔值时,以下值被视为FALSE:

  • 布尔FALSE本身
  • 整数0(零)
  • 浮动0.0(零)
  • 空字符串,字符串'0'
  • 包含零元素的数组
  • 一个零成员变量的对象(仅限PHP 4)
  • 特殊类型NULL(包括未设置的变量)
  • 从空标签创建的SimpleXML对象

其他每个值都被视为TRUE

答案 1 :(得分:5)

零是假的,非零是真的。

在php中,您可以使用===运算符更明确地进行测试。

if (0==false) 
    echo "works"; // will echo works

if (0===false) 
    echo "works"; // will not echo anything

答案 2 :(得分:3)

严格检查的最佳运算符是

if($foo === true){}

那样,你真的在​​检查它是否真实,而不是1或只是设置。

答案 3 :(得分:2)

由于我已经多次访问此页面,因此我决定发布一个示例比较测试。

结果:

$fields = Yii::$app->formschema->formSchema();
foreach ($fields as $field) {
    echo $form->field($model, $field['field'])->{$field['controltype']}();
}

代码:

""    -> false
"abc" -> true
0     -> false
0     -> false
0.1   -> true
1     -> true
1.1   -> true
25    -> true
null  -> false
[]    -> false
[1]   -> true
object(stdClass) -> true

使用PHP 7.2.5在Windows 10 64位上进行了测试。

答案 4 :(得分:1)

PHP使用弱类型(它称之为'类型杂耍'),这是一个坏主意(虽然这是另一次的对话)。当您尝试在需要布尔值的上下文中使用变量时,它会将您的变量转换为布尔值,根据此处提供的一些大多数任意规则: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

答案 5 :(得分:0)

将运算符视为一元函数:is_false(type value)返回true或false,具体取决于特定类型和值的确切实现。考虑if语句通过语法糖隐式调用这样的函数。

其他可能性是类型具有强制转换运算符,它将类型隐式转换为另一种类型,在本例中为字符串为Boolean。

PHP没有公开这些细节,但是C ++允许运算符重载,这暴露了运算符实现的精细细节。