在PHP中如何正确/错误的工作?

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

这在布尔文和types比较表的PHP文档中有介绍。

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

  • 布尔值FALSE本身
  • 整数0 (零)
  • 浮点数0.0 (零)
  • 空string和string'0'
  • 具有零元素的数组
  • 具有零成员variables的对象(仅限PHP 4)
  • 特殊types的NULL (包括未设置的variables)
  • 由空标签创build的SimpleXML对象

其他每个值都被视为“真”

零是假的,非零是真的。

在PHP中,您可以使用===运算符更明确地进行testing。

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

严格检查的最佳运营商是

 if($foo === true){} 

这样,你真的检查是否真的,而不是1或只是设置。

PHP使用弱types(它称为“types杂耍”),这是一个坏主意(虽然这是另一次谈话)。 当你试图在一个需要布尔值的上下文中使用一个variables时,它会根据一些在这里可用的大多数任意规则将任何你的variables转换为一个布尔值: http : //www.php.net/manual/en/language .types.boolean.php#language.types.boolean.casting

将运算符看作一元函数: is_false(type value) ,返回true或false,取决于具体types和值的确切实现。 考虑是否声明通过语法糖隐含地调用这样的函数。

其他的可能性是该types具有cast操作符,这将隐式地将types转换为另一种types,在这种情况下,string转换为布尔值。

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