• 请不要在回答技术问题时复制粘贴 AI 生成的内容
mantianyu
V2EX  ›  程序员

吐槽一下 PHP 的官方实现

  •  
  •   mantianyu · Feb 18, 2014 · 5173 views
    This topic created in 4641 days ago, the information mentioned may be changed or developed.
    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 replies  •  1970-01-01 08:00:00 +08:00
    vibbow
    vibbow
    Feb 18, 2014
    1
    因为 "false" 是不为空的string
    GordianZ
    GordianZ
    Feb 18, 2014
    2
    如果 "false" 算 false, 那 "False"/"FaLsE"/"假" 呢?
    joyqi
    joyqi
    Feb 18, 2014
    3
    这有啥好吐槽的
    yelite
    yelite
    Feb 18, 2014❤️1
    4
    我猜是因为url参数和post的表单解析出来直接是string,为了方便php就有了这种设计
    mantianyu
    mantianyu
    OP
    Feb 18, 2014
    5
    @GordianZ 我就是这个意思, 如果 "false", "False", "FALSE", "NO", "OFF" 都不算 false, 为什么 "0" 是例外?
    mantianyu
    mantianyu
    OP
    Feb 18, 2014
    6
    @joyqi 跟国风接轨嘛
    vibbow
    vibbow
    Feb 18, 2014
    7
    @mantianyu 因为 (int)0 和 (string)0 是无痛转换的?
    hanf
    hanf
    Feb 18, 2014
    8
    php蛋疼又不是两三天了
    infong
    infong
    Feb 18, 2014❤️1
    9
    因为 "0" == 0 而且 0 == false
    所以 "0" == false
    liruqi
    liruqi
    Feb 18, 2014
    10
    你也可以坚持用 === 嘛。
    liuyao729
    liuyao729
    Feb 18, 2014
    11
    字符串除了 0 就没有为假的了
    likexian
    likexian
    Feb 18, 2014
    12
    如果非要那么纠结,就忘记php有==,只用===
    jakwings
    jakwings
    Feb 18, 2014
    13
    @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
    heirenhua
    Feb 19, 2014❤️1
    14
    @mantianyu 你可以看一下PHP中字符串和数字的转换规则。"0"被认为false,只是因为被转换了。
    nina
    nina
    Feb 19, 2014
    15
    技术讨论帖 发个招聘小纸条 小交易招资深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
    lygmqkl
    Feb 19, 2014
    16
    这个应该算自己偷懒的表现,如果你使用的是你自己生成的变量,那么不会有这个疑惑,如果是input进来的自然要做变脸转换,否则php代码的质量如何保证?
    picasso250
    picasso250
    Feb 20, 2014
    17
    ?is_foo=0
    ?is_foo=1

    var_dump($_GET('is_foo'));
    var_dump((bool)$_GET('is_foo'));
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1550 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 18:05 · PVG 02:05 · LAX 10:05 · JFK 13:05
    ♥ Do have faith in what you're doing.