首页 » 网站推广 » php字符串和0比拟技巧_PHP8中字符串与数字的比较更智能

php字符串和0比拟技巧_PHP8中字符串与数字的比较更智能

访客 2024-11-12 0

扫一扫用手机浏览

文章目录 [+]

当然,8.0中的feature不止这些,还有很多。
这里来详细说一下Saner string to number comparisons,便是本文的标题。

征象

PHP中在比较时,我们常常这样操作:

php字符串和0比拟技巧_PHP8中字符串与数字的比较更智能

10 == '10'

结果符合我们的预期,但这样并不是每次都精确,比如:

php字符串和0比拟技巧_PHP8中字符串与数字的比较更智能
(图片来自网络侵删)

// php 7.x0 == 'foobar' // true // php 8.00 == 'foobar' // false

是不是很诡异?

再来一个:

// php 7.xvar_dump(in_array(0, ['foo', 'bar'])); // true// php 8.0var_dump(in_array(0, ['foo', 'bar'])); // false

还有:

// php 7.x$v = 0;switch ($v) { case 'bar': echo 'baaar' . PHP_EOL; case 0: echo 'foo' . PHP_EOL;}// 输出:// baaar// foo// PHP 8.0// 输出// foo为什么

先来说一下PHP中的比较运算,分为两类,严格类型(===,!==)和非严格类型(==, !=, >, >=, 两者的紧张差异如下:

严格类型比较底层用的是strcmp(),非严格类型利用的是所谓的“智能”比较,即将字符串转为数字比拟在比较数组时,严格类型不只会比较值,还会比较索引的顺序,非严格类型只会大略的比较值在比较工具时,严格类型利用工具标识符比较,非严格类型只会比较工具的值

在利用==比较数字和字符串时,PHP 8.0之前的版本会先将字符串转换为数字,之后再做两个数字间的比较,这也便是为什么上门0 == "foobar" = true了。

Saner string to number comparisons

文章标题说PHP8中字符串与数字的比较更智能,详细智能在哪里?针对上面的问题,8.0当中引入Saner string to number comparisons这个特性[2],底层详细的操作为:当比较数字字符时,利用数字与数字比拟,而其他字符与数字比较时,统一利用字符串比较。
我们来通过一个表格来比拟下前后的变革:

Comparison | Before | After------------------------------ 0 == "0" | true | true 0 == "0.0" | true | true 0 == "foo" | true | false 0 == "" | true | false42 == " 42" | true | true42 == "42foo" | true | false

如果喜好,可以关注我哦~

参考:

https://www.php.net/releases/8.0/index.phphttps://wiki.php.net/rfc/string_to_number_comparison
标签:

相关文章

php添加class技巧_PHP 面向对象

在现实天下里我们所面对的事情都是工具,如打算机、电视机、自行车等。工具的紧张三个特性:工具的行为:可以对 工具施加那些操作,开灯,...

网站推广 2024-12-14 阅读0 评论0

mysqlphppdo例技巧_PHP PDO 简单教程

PHP 5.5 版本之前,我们有用于访问 MySQL 数据库的 mysql_ 命令,但由于安全性不敷,它们终极被弃用。mysql_...

网站推广 2024-12-14 阅读0 评论0

南通php自学技巧_南通近期招聘信息汇总

招聘岗位聘无纺 客户经理多少名岗位职责:根据内部风险要求,实行各项银行信贷产品推广操持,完成各项指标;及时反馈客户建议。岗位哀求:...

网站推广 2024-12-14 阅读0 评论0