PHP分不清它们,真相居然是这样!

第一次写UC体标题。

PHPer大多是自学,于是很多人会忽视一些基础知识,比如即将谈到的字符串的比较。

PHP是弱类型语言,不同类型的值可以用==运算符进行比较,既然是不同类型,那么要一起比较就就肯定会有转换类型的逻辑,这里就隐藏了一个大坑 --- 字符串和数字的比较运算

我们来看例子:

<?php

var_dump('9D电影' == 9);
var_dump('一个亿' == 0);

那么这段代码的运行结果是:

bool(true)
bool(true)
好害怕

不要惊慌。

PHP官方文档其实已经详细说明了这种比较计算的逻辑了:

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。

--- PHP手册 > 语言参考 > 比较运算符

那么以后看到这种也不要怪产品设计了:

<?php

var_dump(in_array('男默女泪', [32, 34, 0, '呵呵'])); //返回:bool(true),请使用类型检查参数:in_array('男默女泪', [32, 34, 0, '呵呵'], true)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容