PHP 比较运算符 var_dump("a" == 0) 为 true

这篇文章主要讲解一下 PHP 使用比较运算符容易出错的地方

$a  == $b 等于  TRUE,如果类型转换后 $a 等于 $b。
$a === $b 全等 TRUE,如果 $a 全等于 $b,并且它们的类型也相同。

 

var_dump("a" == 0)  

返回结果: boolean true

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。

此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。

 

字符串转换为数值

当一个字符串被当作一个数值来取值,其结果和类型如下:

如果该字符串没有包含 '.','e' 或 'E' 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串将被当成 integer 来取值。其它所有情况下都被作为 float 来取值。

该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成。

 

 

官方资料来源:

https://www.php.net/manual/zh/language.operators.comparison.php

https://www.php.net/manual/zh/language.types.string.php#language.types.string.conversion

posted @ 2019-03-26 15:04  Ryan_zheng  阅读(672)  评论(0编辑  收藏  举报