首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP知识点:从‘xulei’ =0是否为真谈谈运算符

if('xulei' == 0){

echo 1;

}else{

echo 2;

}

据说这是一道小米的php面试题,看到题目想当然的以为输出的是:2,在代码中验证了一下输出的是:1。惊出一身冷汗,赶紧翻一翻php官网手册。

以下摘抄一段php手册中的用户贡献的笔记:

The way PHP handles comparisons when multiple types are concerned is quite confusing.

PHP处理不同类型值的比较的方式是令人困惑的。

For example:

举个例子:

"php" == 0

这是真的,因为在比较时字符串将转化为一个整数。任何字符串(不是数字),转化成一个整数时将是0。

Note that php comparison is not transitive:

"php" == 0 => true

0 == null => true

null == "php" => false

坑在哪里?

php是一门弱类型语言,强类型和弱类型主要是站在变量类型处理的角度进行分类的。强类型是指不允许隐式变量类型转换,弱类型则允许隐式类型转换。所以,关键在于变量数据类型的转换。

什么叫隐式类型转换?

隐式是指源码中没有明显的类型转换代码,也就是说,一个变量,你可以直接给他赋值字符串,也可以直接给他赋值数值,你还可以直接让字符串类型的变量和数值类型的变量相加,虽然得出的最终结果未必是你想象的那样,但一定不会报错。

也就是说在上例的比较运算中,发生了变量类型的转换,但字符串与数字作比较的时候,字符串会被转换为数字,而不是数字的字符串转化成整数时会被转化成0。

再来补充一些

$a='2';//字符型2

$b=2;//数值型2

$a==$b,是对的,都是2

$a===$b,是不对的,因为$a是字符型$b是数值型,值虽一样,但类型不一样。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190904A04JO500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券