Laravel开发实践PHP经验分享

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

2017-03-11  本文已影响356人  该叶无法找到

第一次写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)

上一篇 下一篇

猜你喜欢

热点阅读