详解PHP比较运算符'=='和'==='之间的区别及注意事项
使用"=="比较字符串和数字时,如果在使用前没有完全理解规范,可能会导致意外的错误或安全漏洞。
这次,我们总结了比较运算符"=="和"===
在 PHP 中进行值比较时,您使用 "==" 还是 "==="? 使用"=="比较字符串和数字时,如果在使用前没有完全理解规范,可能会导致意外的错误或安全漏洞。 这次,我们总结了比较运算符"=="和"==="的注意事项。 比较运算符'=='和'==='之间的区别 关于“==”和“===”的区别。 "===" 仅当值和类型匹配时才返回 true 为了解释方便,我先用“===”来解释严格比较。 “===”的严格比较只有当比较的值是相同的值并且是相同的类型时才返回true。 例如,如果将数字 1 与引号中的 '1' 进行比较,它将为 falsePHP运算符,因为它是数字类型和字符类型之间的比较。 示例代码 //?相等比较 if?(?1?==?'1'?){ ?????echo??'true'?.?" "==" 类型转换后进行比较 下面的例子是PHP7之前的规范,因为PHP8改变了数值类型字符串的定义。 很多人误以为 '==' 是不比较类型的 '===' 版本,其实不然。 如果您只是不比较类型,则无法解释为什么以下比较为真。 示例代码 if?(?10?==?'10元'?){ ?????echo??'true'?; }else{ ????echo?'false'?; }?//true 为什么10和'10元'相等? 这是因为如果任一值包含数字,则“==”比较是通过将字符串转换为数字来完成的。 因此,在这种情况下,“字符串'10元'”在比较之前被转换为“数字10” 。 结果,比较结果为“10 == 10”并返回 true。 将字符串转换为数字的规则 字符串转换成数字的时候,我总结了一个例子,说明它转换成什么样的数字。 尝试使用(int)将字符串转换为数字,并查看每个字符串是什么类型的数字。 示例代码 echo?(int)'10元'." 执行结果 10 500 0 0 0 简而言之,“如果字符开头有数字,则将其转换为数字字符串,否则为0”。 因此,将 0 与不以数字开头的字符串进行比较将始终为真。 示例代码 if(0?==?''){ ????echo?'true'." 如你所见,“==”比较可能会无意中返回 true。 类型不同但值相同的情况下进行处理 即使类型不同,但如果值相同,也返回真的情况。 这种情况下我不想使用“==”这种模棱两可的比较,因为可能会出现“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 的 == 比较字符串和数字时要注意的一点。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |