首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么PHP认为0等于一个字符串?

为什么PHP认为0等于一个字符串?
EN

Stack Overflow用户
提问于 2011-07-27 18:45:26
回答 5查看 33.6K关注 0票数 125

我有下面这段代码:

代码语言:javascript
复制
$item['price'] = 0;
/* Code to get item information goes in here */
if($item['price'] == 'e') {
    $item['price'] = -1;
}

它的目的是将商品价格初始化为0,然后获取有关它的信息。如果价格被告知为'e‘,则表示交换而不是卖出,后者以负数存储在数据库中。

也有可能将价格保留为0,因为该项目是奖励,或者价格将在稍后设置。

但是,只要没有设置价格,它的初始值就是0,上面指出的if循环的计算结果为真,价格被设置为-1。也就是说,它认为0等于'e‘。

这怎么解释呢?

当价格被提供为0(初始化后)时,行为不稳定:有时if计算为true,有时计算为false。*

EN

回答 5

Stack Overflow用户

发布于 2011-07-27 18:47:46

==运算符将尝试匹配值,即使它们属于不同的类型。例如:

代码语言:javascript
复制
'0' == 0 will be true

如果您还需要类型比较,请使用===运算符:

代码语言:javascript
复制
'0' === 0 will be false
票数 8
EN

Stack Overflow用户

发布于 2013-03-29 22:47:21

你的问题是双等运算符,它会将右成员类型转换为左类型。如果您愿意,可以使用strict。

代码语言:javascript
复制
if($item['price'] == 'e') {
    $item['price'] = -1;
}

让我们回到你的代码(上面复制的)。在这种情况下,在大多数情况下,$item‘’price‘是一个整数(显然,当它等于e时除外)。因此,根据PHP的规则,PHP会将"e"类型转换为整数,从而产生int(0)。(不相信我?<?php $i="e"; echo (int)$i; ?>)。

要轻松摆脱这一点,可以使用三重相等(精确比较)运算符,它将检查类型,而不会隐式进行类型转换。

附言:一个有趣的事实:a == b并不意味着b == a。拿你的例子来反其道而行之:如果$item‘if ("e" == $item['price'])’始终是一个整数,那么价格将永远不会真正实现。

票数 8
EN

Stack Overflow用户

发布于 2012-04-26 13:54:06

在PHP中有一个相当方便的方法来验证"0"," false ","off“作为== false和"1","on"," true”的组合作为== true,这是经常被忽视的。它对于解析GET/POST参数特别有用:

代码语言:javascript
复制
filter_var( $item['price'], FILTER_VALIDATE_BOOLEAN );

它与这个用例并不完全相关,但考虑到相似性和事实,这是搜索在询问验证(字符串)“0”是否为false的问题时倾向于发现的结果,我认为这会对其他人有所帮助。

http://www.php.net/manual/en/filter.filters.validate.php

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6843030

复制
相关文章

相似问题

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