为什么我的If语句在PHP中接受了不正确的String条件


Why is my If statement accepting an incorrect String condition in PHP?

我很困惑,因为PHP接受以下条件。

<?php
   $b = true;
   if($b == 'anything') 
      echo 'ok';
   else
      echo 'no';
?>

PHP显示ok。我仍然不明白这怎么可能。

也许,你可以帮我澄清一下。

这应该适用于

$b = true;
if($b === 'hello') 
    echo 'ok';
else
    echo 'no';

当使用==时,php只检查值是否相等,而不比较值的类型,当第一个值是bool时,php将两边转换为bool,转换任何字符串,但空字符串''和字符串'0'将返回true,这就是为什么必须使用===

点击此链接了解php 中的比较

Php不是一种严格类型的语言,因此IF语句后半部分的值被认为是Truthy值。如果您也要完成类型,请使用"==="比较。看看这一页上的真表。http://php.net/manual/en/types.comparisons.php

根据PHP关于比较运算符的手册(http://php.net/manual/en/language.operators.comparison.php)==检查"相等性",而===检查同一性(实际上意味着它具有相同的TYPE和相同的VALUE)。

当比较(为了相等)boolstring时,string被广播到bool。根据文件:

转换为布尔值时,以下值被视为FALSE:*布尔值FALSE本身*整数0(零)*浮点0.0(零)*空字符串和字符串"0"*具有零元素的数组

所以你的字符串'anything'变成了true