跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • PHP 的迷惑行为 0 == ‘string’ 为什么返回 true?
未分類
2020 年 11 月 1 日

PHP 的迷惑行为 0 == ‘string’ 为什么返回 true?

PHP 的迷惑行为 0 == ‘string’ 为什么返回 true?

資深大佬 : krabs 0

代码片段中有一段代码是这样的

$p = 'auto'; if(intval($p) == $p){  // 0 == 'auto'  ...   结果这个条件居然是成立的? } 

然后我通过

var_dump(  intval($width) == $width,  0=='auto1',  0=='string',  intval($width),  $width ); 

结果返回

bool(true) bool(true) bool(true) int(0) string(4) "auto" bool(false) 

然后我又去 Js 控制台试了一下 0 == ‘string’ 返回的是 false

为什么 int 0 会等于 string ?

大佬有話說 (44)

  • 資深大佬 : puzzle9

    先了解下 == 和 === 区别
    再说这个

  • 主 資深大佬 : krabs

    @puzzle9 所以=== 和上面的对比有什么关系 === 是带类型对比 int 肯定不和 string 成立
    但是问题是 == 不论是值 还是类型 都不成立 怎么返回 true

  • 資深大佬 : jowan

    https://www.php.net/manual/en/language.operators.comparison.php

  • 資深大佬 : puzzle9

    @krabs 这就牵扯到 php 是世界上最好的语言 设计的哲学了
    上那个官方文档可以瞅瞅

  • 資深大佬 : Chappako

    0 是 int,”string” 想要和 0 比较,就要先转换成 int,你自己试试 intval(‘string’)

  • 資深大佬 : xoxo419

    0 与任何字符串进行 == 比较时都为 true

    查阅的文章: https://www.cnblogs.com/weiyalin/p/10388167.html

  • 資深大佬 : devwolf

    #3 学到了

  • 資深大佬 : jay4497

    脚本类语言存在很多类型隐式转换的,真要比就用 `===`

  • 資深大佬 : jowan

    很多语法是不能相并论的 比如 js 的 ‘string’ || false
    如果你对 PHP 或者 JS 不太熟悉 最好是快速看下他的基础语法
    有很多看似类似却又不同的东西

  • 資深大佬 : eason1874

    PHP == 不是说不带类型比较,== 是先转换类型再比较。

    数字比较字符串,字符串先被转换成数字,才进行比较。

    0==’string’ 等于 0==0 所以是 true

  • 資深大佬 : impl

    解释器看到 0 ==,知道你要对比的是数值,所以就把后面的东西解析为数值,而’string’只能解析成数字 0

  • 資深大佬 : GuangXiN

    因为 int == string 会触发自动类型转换,PHP 会把所有非数值字符串转换为 0 。

    尝试 var_dump((int) ‘abc’);

  • 資深大佬 : kuro1

    好的 IDE 会提示你是否要用 ===

  • 資深大佬 : duhui

    @xoxo419
    php > var_dump(0 == ‘1aaa’);
    php shell code:1:
    bool(false)

  • 資深大佬 : hhf

    @xoxo419 老老实实看官方文档吧,兄弟

    var_dump(1 == ‘2’);

  • 資深大佬 : hhf

    @hhf var_dump(0 == ‘2’)

  • 資深大佬 : avenger

    永远不要用 ==,可以加一个 php-cs-fix 自动修复

  • 資深大佬 : keepeye

    先了解下动态语言,类型不一致时是如何比较的吧
    同样是将 str 转成 int 再比较,只是 js 和 php 的转换逻辑不一样

    php:
    0 == ‘auto1’ -> 0 == int(‘auto1’) -> 0 == 0 // true
    js:
    0 == ‘auto1’ -> 0 == parseInt(‘auto1’) –> 0 == NaN // false

    你再试试这个 123 == ‘123aaaaa’ ,js 和 php 就一致了

  • 資深大佬 : keepeye

    另外多嘴一句,使用 == 比较不同类型的变量是不负责任的行为,应当避免

  • 資深大佬 : imdong

    intval($p) == (int) $p

  • 資深大佬 : CODEWEA

    你用 js 的语法 来推测 php ?这两种语言语法都不一样的

  • 資深大佬 : CODEWEA

    0 == ‘string’
    等于
    0==(int)(‘string’)

  • 資深大佬 : Xusually

    老问题了,php 会尝试去转化字符串到数字,看下面的

  • 資深大佬 : est

    PHP 探测任意网站密码明文 /加密手段办法:md5(‘240610708’) == md5(‘QNKCDZO’)

    /t/188364

  • 資深大佬 : AngryPanda

    想想 ‘0’ == ‘string’ 吗?

  • 資深大佬 : hubqin

    之前被 in_array 坑过,要加第三个参数为 true 进行严格比较

  • 資深大佬 : des

    那你试试 js 的这个 0 == ”,脚本语言就是会有很多这种的

  • 資深大佬 : yafoo

    前段时间,被这个特性坑惨了

  • 資深大佬 : Achiii

    还有这种坑,下次只用全等

  • 資深大佬 : a591826944

    @xoxo419 #6 错。。是 非 0 数字开头的字符串

  • 資深大佬 : v2yooha

    php 的隐式转换,我现在涉及数字类型的判断,都会先把两个参数 is_numeric 一下,都为 true 才执行后续,或者直接用===

  • 資深大佬 : v2yooha

    @est 这种不都用 hash_equals 了吗

  • 資深大佬 : est

    @v2yooha 发帖的那个时候还木有。。

  • 資深大佬 : lovecy

    要么用 empty 判断空值,要么用全等判断,==这种自带各种转换的,了解了规则后再使用
    ==和===的 Map:php.net/manual/zh/types.comparisons.php
    比较和转换优先级:php.net/manual/zh/language.operators.comparison.php#language.operators.comparison.types

  • 資深大佬 : zencoding

    @xoxo419 “任何字符串”有误,比如 intval(“32xxx23”);

  • 資深大佬 : abcd191898105

    所以说 php 就很离谱了,js 的话,就是返回 false 了。来玩 js

  • 資深大佬 : fucker

    看到标题我就猜到是 == 和 === 的问题了 PHP 的迷惑行为 0 == 'string' 为什么返回 true?

  • 資深大佬 : mostkia

    所以我编程已经很少用==了,有些问题并没有答案,就是语言这样设计的,你得踩过无数的坑之后才能算是熟练的使用它。==和===的问题在各种语言中都有自己的解释。一般还是推荐完全等于号===,排除未知的问题。

  • 資深大佬 : yc8332

    不过类型进行比较。你也是人才了。。php 的特性就是这样,反正也不报错。

  • 資深大佬 : xbchaonba

    @xoxo419 和大于 0 开头的带数字的字符串比就是 false 了

  • 資深大佬 : fuxkcsdn

    我项目里,除非一些极其特殊的情况(必须加注释),谁敢用 == 进行判断,会被我拉来骂的

  • 資深大佬 : no1xsyzy

    @xbchaonba ‘0’ == ‘1e-10000000000000000’
    1 开头,带数字,比较结果为 true
    https://tio.run/##[email protected]/fxr4go0ChLLEoPqU0t0BD3UBdwdZWQd0wVdfQAA2oa1or2Nv9/w8A

  • 資深大佬 : qq1340691923

    世界上最好的语言

  • 資深大佬 : xbchaonba

    @no1xsyzy 牛批科学计数法都用上了,涨知识了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具