首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么1234 == '1234 test‘的计算结果为真?

为什么1234 == '1234 test‘的计算结果为真?
EN

Stack Overflow用户
提问于 2012-08-28 10:24:09
回答 5查看 5.7K关注 0票数 80

可能重复:

php == vs === operator

对于我确信的人来说,这是一个简单的答案。有人能解释为什么这个表达式的计算结果是真的吗?

(1234 == '1234 test')
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-28 10:26:10

因为您使用的是== (相似性)运算符,而PHP将字符串强制转换为int。

要解决这个问题,可以使用=== (相等)操作符,该操作符不仅检查值是否相同,还检查数据类型是否相同,因此" 123“字符串和123int不会被视为相等。

票数 95
EN

Stack Overflow用户

发布于 2012-08-28 10:26:31

将字符串转换为整数时,直到第一个非数字字符的任何数字字符都将成为数字。因此,'1234 test'变成了1234,因为空格不是数字字符。

因此,1234 == '1234 test'

如果您想强制进行字符串比较,则应强制转换为string:

''.(1234) == '1234 test' // implicit
(string) 1234 == '1234 test' // explicit
strval(1234) == '1234 test' // procedural
票数 28
EN

Stack Overflow用户

发布于 2012-08-28 12:50:02

您正在松散地比较两种不同类型的数据(整数和字符串)。PHP有一个非常详细的图表,展示了当使用松散比较二进制运算符(==)时,比较如何在他们的系统中工作:

http://php.net/manual/en/types.comparisons.php

如果要确保类型也是同步的,即它们都是整数或都是字符串,请使用强类型比较运算符(===)。

请注意,当使用此运算符时,也将返回false:

1234 === '1234'

如果在比较时不确定自己的类型,可以将强类型比较与PHP类型转换结合使用:

$a = 1234;
$b = '1234';

if ($a === $b) { }            // Will not fire, as it is false
if ((int)$a === (int)$b) { }  // Will fire, as it is true
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12151997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档