我想知道PHP如何在内部处理 true / false 比较。
我知道true定义为1,false定义为0。
当我if("a"){ echo "true";}
时,它会回复“ true ”。 PHP如何将“a”识别为1?
答案 0 :(得分:89)
booleans和type comparison tables的PHP文档中介绍了这一点。
转换为布尔值时,以下值被视为FALSE:
FALSE
本身0
(零)0.0
(零)'0'
NULL
(包括未设置的变量)其他每个值都被视为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 ++允许运算符重载,这暴露了运算符实现的精细细节。