PHP 中'false'等于 true?

2017-06-20 11:27:29 +08:00
 iguoji

例子:'0' == false

PHP 官方文档中有这么描述

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

连接: http://www.php.net/manual/zh/language.operators.comparison.php

所以,'0' == false,我能理解

那么,'false' == true,我是不是应该理解为,先将'false'转成整数型

而将字符串'false'转成数字后,结果为0,为什么等于true呢?

参考: http://php.net/manual/zh/language.types.string.php#language.types.string.conversion

我该如何理解这个过程?

8213 次点击
所在节点    PHP
40 条回复
clino
2017-06-20 13:36:59 +08:00
如果 'false' 要等于 false,那 'False' 'FAlse' 'FALse' 'FALSe' 'FALSE' 这几个呢?
caola
2017-06-20 13:38:32 +08:00
只要是字符串类型的都是 true,不会转换成什么才比较。
除非是 === 才会比较类型
littleylv
2017-06-20 13:39:56 +08:00
正式的业务代码中不会这么写的,这么写的人基本被打死了
tabris17
2017-06-20 13:40:01 +08:00
阿西吧~'false'是字符串啊
troywinter
2017-06-20 13:41:17 +08:00
另外我再指出一点错误,为什么它会 evaluate 成 0,你引用的那篇 php 官网的文档明确说明了:
“该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0 (零)。合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成。”
很明显这个你转化成 int 的这个字符串不是一个数字的字符串表示,所以必然返回的是 0。
xzem
2017-06-20 13:44:51 +08:00
zjsxwc
2017-06-20 13:49:47 +08:00
我前几天碰到这个坑

<?php
$a= 0;
var_dump($a == "imageUrl");//输出 bool(true)
wolfan
2017-06-20 13:50:41 +08:00
引起来了不是字串么?,既然字串里有东西为什么不是真?
icedx
2017-06-20 13:53:04 +08:00
很多语言都是'false'等于 true
w516322644
2017-06-20 15:26:16 +08:00
@zjsxwc 这个会把后面的字符串强制转换成 int。
demerol
2017-06-20 15:34:29 +08:00
if err 这种用法在弱类型的 js 里很常用,只有是非空非 false 就是 true
zi
2017-06-20 17:13:31 +08:00
@zjsxwc #27 var_dump(0 == "imageUrl", 0 == false, false == "imageUrl", intval("imageUrl"), boolval("imageUrl"));
skylancer
2017-06-20 17:31:45 +08:00
请注意安全性问题哟
goodan
2017-06-20 17:35:38 +08:00
虽然不会编程,但看标题就猜到是字符串。
bombless
2017-06-20 17:35:40 +08:00
false 转为字符串的时候是''
0 转为字符串的时候是'0'

所以感觉这里面并没有什么不对的(
mylab
2017-06-20 18:34:30 +08:00
非空字符串==true 没问题啊
bombless
2017-06-20 20:09:49 +08:00
@mylab 楼主的意思是字符串 0 是 falsy 的
justplaymore
2017-06-21 01:11:56 +08:00
尽量用正确的方式去使用语言吧,隐式类型转换这种东西无论哪种语言,都是尽量避免去使用的,有这种特性不代表就应该去使用它,要衡量一下代价的。
mingyun
2017-06-24 09:49:30 +08:00
@rming 领教了
2xShake
2017-07-03 13:50:44 +08:00
话说 php 里什么情况下你会用到 == ‘ false ’ 来走判断

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/369755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX