PHP如何将其解释为真实?

时间:2014-02-07 13:56:04

标签: php

我尝试执行此代码

<?php
  $id = 'p1';
  echo $id."<br>";
  echo ($id == 0) ? 'true' : 'false';
?>

有人可以向我解释为什么PHP认为'p1'等于0?

4 个答案:

答案 0 :(得分:3)

在将字符串与数字进行比较时,Php从字符串'p1'执行implicit conversion到数字int(0)

var_dump((int)'p1');
// int(0)

所以真正发生的事情是:

echo ((int)'p1') == 0) ? 'true' : 'false';

因此,任何不以数字与零开头的字符串都会生成true,因此您的脚本中会显示'true'

答案 1 :(得分:1)

来自documentation

  

转换为布尔值时,会考虑以下值   FALSE:

the boolean FALSE itself
the integer 0 (zero)
the float 0.0 (zero)
the empty string, and the string "0"
an array with zero elements
an object with zero member variables (PHP 4 only)
the special type NULL (including unset variables)
SimpleXML objects created from empty tags
     

其他每个值都被视为TRUE(包括任何资源)。

您的字符串不为空,因此为TRUE

答案 2 :(得分:1)

来自PHP Manual

  

如果我们尝试将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都会转换为数字,并且数字执行比较

正如您在同一页面上的比较运算符表中所见:

  

$a === $b - 相同 - TRUE如果$a等于$b,且它们的类型相同。

答案 3 :(得分:1)

这是因为php是松散类型的语言。

基本上,不同类型之间的比较(在您的情况下为字符串和整数)有时会产生令人惊讶的结果。并且基本上从未建议比较不同类型的变量。不过,您可以使用[类型比较表](单击)1来检查预期的结果,并找出哪些情况不会产生令人惊讶的结果。