为啥我的 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)。
当比较bool
和string
(为了相等)时,string
被强制转换为bool
。根据docs:
当转换为布尔值时,以下值被视为 FALSE: * 布尔值 FALSE 本身 * 整数 0(零) * 浮点数 0.0(零) * 空字符串和字符串“0” * 一个零元素的数组
所以你的字符串'anything'
变成了true
。
【讨论】:
【参考方案3】:Php 不是一种严格类型化的语言,因此 IF 语句后半部分的值被认为是一个真值。如果您还想比较类型,请使用“===”比较。看看这个页面上的真值表。 http://php.net/manual/en/types.comparisons.php
【讨论】:
以上是关于为啥我的 If 语句在 PHP 中接受不正确的字符串条件?的主要内容,如果未能解决你的问题,请参考以下文章
在 if with and/or 语句 PHP 中正确使用括号