吐槽一下 PHP 的官方实现 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技问题时复制粘贴 AI 生成的内容
mantianyu
V2EX    程序员

吐槽一下 PHP 的官方实现

  •  
  •   mantianyu 2014-02-18 16:42:11 +08:00 4285 次点击
    这是一个创建于 4262 天前的主题,其中的信息可能已经有所发展或是发生改变。
    http://www.php.net/manual/en/language.types.boolean.php

    When converting to boolean, the following values are considered FALSE:

    the boolean FALSE itself
    the integer 0 (zero)
    the float 0.0 (zero)
    the empty string, and the string "0"
    an array with zero elements
    an object with zero member variables (PHP 4 only)
    the special type NULL (including unset variables)
    SimpleXML objects created from empty tags

    为什么强转 boolean 时 "0" 被认为是 false, 既然如此, 那 "false" 怎么不认为是 false?
    17 条回复    1970-01-01 08:00:00 +08:00
    vibbow
        1
    vibbow  
       2014-02-18 16:48:29 +08:00
    因为 "false" 是不为空的string
    GordianZ
        2
    GordianZ  
       2014-02-18 16:54:19 +08:00
    如果 "false" 算 false, 那 "False"/"FaLsE"/"假" 呢?
    joyqi
        3
    joyqi  
       2014-02-18 17:01:08 +08:00
    这有啥好吐槽的
    yelite
        4
    yelite  
       2014-02-18 17:01:56 +08:00   1
    我猜是因为url参数和post的表单解析出来直接是string,为了方便php就有了这种设计
    mantianyu
        5
    mantianyu  
    OP
       2014-02-18 17:02:11 +08:00
    @GordianZ 我就是这个意思, 如果 "false", "False", "FALSE", "NO", "OFF" 都不算 false, 为什么 "0" 是例外?
    mantianyu
        6
    mantianyu  
    OP
       2014-02-18 17:03:22 +08:00
    @joyqi 跟国风接轨嘛
    vibbow
        7
    vibbow  
       2014-02-18 17:04:04 +08:00
    @mantianyu 因为 (int)0 和 (string)0 是无痛转换的?
    hanf
        8
    hanf  
       2014-02-18 17:08:06 +08:00
    php蛋疼又不是两三天了
    infong
        9
    infong  
       2014-02-18 17:16:23 +08:00   1
    因为 "0" == 0 而且 0 == false
    所以 "0" == false
    liruqi
        10
    liruqi  
       2014-02-18 17:18:36 +08:00
    你也可以坚持用 === 嘛。
    liuyao729
        11
    liuyao729  
       2014-02-18 17:39:49 +08:00
    字符串除了 0 就没有为假的了
    likexian
        12
    likexian  
       2014-02-18 17:44:45 +08:00
    如果非要那么纠结,就忘记php有==,只用===
    jakwings
        13
    jakwings  
       2014-02-18 23:35:59 +08:00
    @infong 不应该用 == 来作传递性说明的…… == 比较比直接转化为布尔值麻烦多了。
    var_dump("0.0" == 0.0); //=> bool(true)
    var_dump((bool)"0.0"); //=> bool(true)
    var_dump((bool)0.0); //=> bool(false)

    我觉得 yelite 说得比较有道理。
    heirenhua
        14
    heirenhua  
       2014-02-19 12:05:54 +08:0   1
    @mantianyu 你可以看一下PHP中字符串和数字的转换规则。"0"被认为false,只是因为被转换了。
    nina
        15
    nina  
       2014-02-19 15:50:52 +08:00
    技术讨论帖 发个招聘小纸条 小交易招资深php开发一名,至少3年实打实的项目经验。PHP高级开发: 15-20k
    岗位职责:
    网站服务端开发,包括后端逻辑以及数据库,缓存等方面。
    岗位要求:
    1、三年以上PHP开发经验,有高并发访问的 Web 应用开发经验;
    2、具备大型开发项目的规划、方案设计以及重构经验的经验;
    3、对 PHP技术及整个解决方案有深刻的理解及熟练的应用,并且精通架构和设计模式,并在此基础上设计产品框架;
    4、精通网络和服务器优化、缓存、分布式存储技术,拥有异构系统开发部署和优化经验;
    5、精通数据库如 Mysql 等的开发 ,熟悉linux shell 脚本的编写,对数据库优化有较深见解。对 memcached 及 NOSql、REDIS 有一定了解;
    6,精通LNMP或LAMP架构。
    7、对计算机系统、网络和安全、应用系统架构等有全面的认识,并有实践基础;
    qq281079797
    lygmqkl
        16
    lygmqkl  
       2014-02-19 19:33:12 +08:00
    这个应该算自己偷懒的表现,如果你使用的是你自己生成的变量,那么不会有这个疑惑,如果是input进来的自然要做变脸转换,否则php代码的质量如何保证?
    picasso250
        17
    picasso250  
       2014-02-20 09:40:47 +08:00
    ?is_foo=0
    ?is_foo=1

    var_dump($_GET('is_foo'));
    var_dump((bool)$_GET('is_foo'));
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3274 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 11:48 PVG 19:48 LAX 04:48 JFK 07:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86