为啥我的 If 语句在 PHP 中接受不正确的字符串条件?

Posted

技术标签:

【中文标题】为啥我的 If 语句在 PHP 中接受不正确的字符串条件?【英文标题】:Why is my If statement accepting an incorrect String condition in PHP?为什么我的 If 语句在 PHP 中接受不正确的字符串条件? 【发布时间】:2014-11-27 11:00:18 【问题描述】:

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

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

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

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

【问题讨论】:

PHP 是一种松散类型的语言,因此可能会发生强制转换。尽可能使用严​​格的比较$b === 'hello' // false。 php.net/manual/en/language.types.type-juggling.php $b 设置为true,然后为$b 赋值,这两个条件都符合“真实性”。如果您需要严格比较,请使用=== how-do-the-php-equality-double-equals-and-identity-triple-equals-comp 在 PHP 的松散比较中,非空字符串被视为等同于 true,就这么简单。 【参考方案1】:

这应该适合你

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

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

关注 link 了解 php 中的比较

【讨论】:

我会解释为什么【参考方案2】:

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

当比较boolstring(为了相等)时,string 被强制转换为bool。根据docs:

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

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

【讨论】:

【参考方案3】:

Php 不是一种严格类型化的语言,因此 IF 语句后半部分的值被认为是一个真值。如果您还想比较类型,请使用“===”比较。看看这个页面上的真值表。 http://php.net/manual/en/types.comparisons.php

【讨论】:

以上是关于为啥我的 If 语句在 PHP 中接受不正确的字符串条件?的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL IF 语句不接受参数

为啥我的代码在 else 语句后出现编译错误?

在 if with and/or 语句 PHP 中正确使用括号

为啥 echo 语句没有在我的 PHP 代码中生成任何内容?

为啥这个 IF NOT EXISTS 语句不起作用?

为啥 if 语句没有打印出字符串? cpp