加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

详解PHP比较运算符'=='和'==='之间的区别及注意事项

发布时间:2022-12-03 11:31:38 所属栏目:PHP教程 来源:网络
导读: 在 PHP 中进行值比较时,您使用 "==" 还是 "==="?
使用"=="比较字符串和数字时,如果在使用前没有完全理解规范,可能会导致意外的错误或安全漏洞。
这次,我们总结了比较运算符"=="和"===

在 PHP 中进行值比较时,您使用 "==" 还是 "==="?

使用"=="比较字符串和数字时,如果在使用前没有完全理解规范,可能会导致意外的错误或安全漏洞。

这次,我们总结了比较运算符"=="和"==="的注意事项。

比较运算符'=='和'==='之间的区别

关于“==”和“===”的区别。

"===" 仅当值和类型匹配时才返回 true

为了解释方便,我先用“===”来解释严格比较。

“===”的严格比较只有当比较的值是相同的值并且是相同的类型时才返回true。

例如,如果将数字 1 与引号中的 '1' 进行比较,它将为 falsePHP运算符,因为它是数字类型和字符类型之间的比较。

示例代码

//?相等比较
if?(?1?==?'1'?){
?????echo??'true'?.?"
"?; }?else?{ ?????echo??'false'?.?"
"?; }?//true //?严格比较 if?(?1?===?'1'?){ ?????echo??'true'?.?"
"?; }?else?{ ?????echo??'false'?.?"
"?; }?//false

"==" 类型转换后进行比较

下面的例子是PHP7之前的规范,因为PHP8改变了数值类型字符串的定义。

很多人误以为 '==' 是不比较类型的 '===' 版本,其实不然。

如果您只是不比较类型,则无法解释为什么以下比较为真。

示例代码

if?(?10?==?'10元'?){
?????echo??'true'?;
}else{
????echo?'false'?;
}?//true

为什么10和'10元'相等?

这是因为如果任一值包含数字,则“==”比较是通过将字符串转换为数字来完成的。

因此,在这种情况下,“字符串'10元'”在比较之前被转换为“数字10” 。

结果,比较结果为“10 == 10”并返回 true。

将字符串转换为数字的规则

字符串转换成数字的时候,我总结了一个例子,说明它转换成什么样的数字。

尝试使用(int)将字符串转换为数字,并查看每个字符串是什么类型的数字。

示例代码

echo?(int)'10元'."
"; echo?(int)'500元'."
"; echo?(int)'这个商品10元'."
"; echo?(int)'hoge'."
"; echo?(int)''."
";

执行结果

10
500
0
0
0

简而言之,“如果字符开头有数字,则将其转换为数字字符串,否则为0”。

因此,将 0 与不以数字开头的字符串进行比较将始终为真。

示例代码

if(0?==?''){
????echo?'true'."
"; }else{ ????echo?'false'."
"; }?//true if(0?==?'hoge'){ ????echo?'true'."
"; }else{ ????echo?'false'."
"; }?//true

如你所见,“==”比较可能会无意中返回 true。

详解PHP比较运算符

类型不同但值相同的情况下进行处理

即使类型不同,但如果值相同,也返回真的情况。

这种情况下我不想使用“==”这种模棱两可的比较,因为可能会出现“10 =='10元'”为真的情况。

想要实现这个需求,可以使用以下两种方法。

1. 将值转换(强制转换)为字符串类型

通过在比较的时候将数值转换成字符串,这样就变成了字符串与字符串的比较,所以不用经过PHP自动转换就可以比较数值。

使用 (string) 为变量添加前缀会将其转换为字符串。

示例代码

$a?=?'10';
$b?=?10;
if((string)$a?===?(string)$b){
????echo?'true';
}else{
????echo?'false';
}?//?true

2.使用strcmp函数比较字符串

另一种方法是使用 PHP 的内置函数 strcmp(),它允许您将两个值作为字符串进行比较。

由于如果值匹配则返回 0,因此可以通过与 0 进行比较来进行条件分支。

示例代码

$a?=?'10';
$b?=?10;
if(strcmp($a,?$b)?===?0){
????echo?'true';
}else{
????echo?'false';
}?//?true

结语

PHP的一大魅力在于,它可以自动转换,即使编写源代码时不考虑类型,也可以运行,但同时也可能会导致意外的风险。

熟悉 PHP 的比较运算符。

这是使用 PHP 的 == 比较字符串和数字时要注意的一点。

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!