字符串在PHP中等于零

由于PHP的弱类型性质,您可以做一些奇怪的事情,其中一些是好事,而其中一些则可以使您脚踏实地。拿下面的小片段。

echo '1' + 5;

在某些语言中,这可能会导致程序崩溃,但是PHP会尝试将任何字符串评估为整数。在这种情况下,它将字符串转换为整数1并将其加到5成为6。

顺便说一句,如果您使用JavaScript进行此操作,则会发现相反的结果。由于串联字符与加法字符相同,因此,如果任何当前值是字符串,JavaScript都将始终尝试截断该值。因此,JavaScript中的结果将为“ 15”。

如果我们将字符串更改为字符串“ one”,然后执行相同的操作,则结果为5。

echo 'one' + 5;

这是因为如果PHP无法将字符串转换为整数,则将假定它为0。

我们可以通过比较将其提升到另一个层次。查看PHP类型比较表,您会发现可以使用很多不同的方式来比较两个值。

看一下下面的代码片段。预期结果将是什么?

$a = 'a string';
$b = 0;
 
if ( $a == true && $b == false && $a == $b ) {
 exit;
}

好答案是程序将退出,因为所有这些比较都等于true。

'a string'== true等同于true,因为与布尔值相比,PHP会将所有非空字符串都评估为true。

0 == false等于true,因为与布尔值比较时,整数0被评估为false。

'a string'== 0的计算结果也为true,因为与整数进行比较时,任何字符串都会转换为整数。如果PHP无法正确转换字符串,则将其评估为0。因此0等于0,等于true。

要解决此问题,可以使用===运算符代替==运算符。此运算符(也称为三重等于运算符)不仅会在两个值具有相同值的情况下,而且在它们具有相同类型的情况下,也会求值为true 。因此,如果我们将示例更改为使用三重等于运算符,则所有条件都将评估为false。这是因为字符串不能为布尔值,整数不能为布尔值,并且字符串不等于整数。

记住两个equals运算符之间的区别很重要。每个函数都有其自己的用途,但是如果您对值的类型有任何疑问,请使用三重运算符,特别是通过测试会给程序带来灾难。

使用等函数时,三等号运算符必不可少strpos()。这是因为当找不到字符串时,它将返回false。如下面的示例,其中$position变量等于false。

$position = strpos('abcd','z');

但是,如果在位置0找到该字符串怎么办?如果您使用了双等号运算符,那么您会发现自己的头寸等于假。