V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xxbutoo
V2EX  ›  PHP

PHP echo 出来的 bool 类型的值,为什么会被转成 int?

  •  
  •   xxbutoo · 2020-08-08 03:58:43 +08:00 · 3665 次点击
    这是一个创建于 1566 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题:

          $a = true;
          echo $a;
          //输出 1;
    
          //但是想输出 true,咋办?
          echo json_encode($a);
          //输出 true;
    

    json_encode()会对参数进行 json 编码, 那 php 为什么要默认帮忙转一下,明明没有明确的指令

    18 条回复    2020-08-09 12:58:02 +08:00
    shiny
        1
    shiny  
       2020-08-08 04:12:00 +08:00
    翻下手册,echo 只接受 string 类型参数,也就意味着 $a 会隐式转化为 string,和 echo strval($a); 结果一致。
    shiny
        2
    shiny  
       2020-08-08 04:13:46 +08:00   ❤️ 1
    想要直接输出变量可以用 var_export
    zsdroid
        3
    zsdroid  
       2020-08-08 08:14:15 +08:00
    true,false 本身就是非可视化的,要么显示成字符串格式,要么显示成数字格式
    zsdroid
        4
    zsdroid  
       2020-08-08 08:22:13 +08:00
    php 奇葩的地方是 true 显示成数字格式,false 显示成字符串格式
    qsbaq
        5
    qsbaq  
       2020-08-08 08:25:27 +08:00
    echo $a ? 1:0;
    pinews
        6
    pinews  
       2020-08-08 09:11:16 +08:00
    @zsdroid 以其昏昏使人昭昭
    sagaxu
        7
    sagaxu  
       2020-08-08 09:15:59 +08:00 via Android
    this is php
    DavidNineRoc
        8
    DavidNineRoc  
       2020-08-08 11:13:45 +08:00
    日常黑 PHP, 楼主不就是想要这样的?
    function echoBool(bool $v)
    {
    echo $v ? 'true' : 'false';
    }

    我已经向 PHP9 提出草案, 预计 PHP10 将合并, 你就可以使用这个 Feture
    xiangyuecn
        9
    xiangyuecn  
       2020-08-08 12:00:59 +08:00
    echo false 好像是输出?没有任何输出吧。比较变态
    sadfQED2
        10
    sadfQED2  
       2020-08-08 12:15:05 +08:00 via Android
    var_dump 输出 bool 啊
    areless
        11
    areless  
       2020-08-08 12:32:46 +08:00 via Android
    并不是每一个语言为输出 json 而服务的。任何早期的动态语言都这样。想用就别计较。何况自从 node 以后,php 跟 js 是天敌。谁鸟你这种想 json 就有 json,自以为是的写法啊。你可以引入 cjson 取代内置函数,php 现在也是支持 ffi 的。
    chengxiao
        12
    chengxiao  
       2020-08-08 13:09:05 +08:00
    @areless 不不不,早期的 python 就不这样
    xxbutoo
        13
    xxbutoo  
    OP
       2020-08-08 23:10:28 +08:00
    @qsbaq 不是 我是要输出
    ```
    $a = true;
    $b = "age=" . $a;
    echo $b; //此时我想输出 age=true, 而不是 age=1
    ```
    xxbutoo
        14
    xxbutoo  
    OP
       2020-08-09 00:14:36 +08:00
    @sadfQED2

    如果是:
    $a = true;
    return "sex=" . $a; //想要的输出效果是 sex=true, 而不是 sex=1 呢
    qsbaq
        15
    qsbaq  
       2020-08-09 08:07:04 +08:00
    php 可以用 var_dump 输出具体的类型,但是其中也带了 boolean .
    实际项目中都是用 01 来表示 true 和 false
    如果要强制 true,那就只能作为字符串输出'true','false'
    sadfQED2
        16
    sadfQED2  
       2020-08-09 09:20:00 +08:00 via Android
    @xxbutoo php 里面,.表示字符串连接,就像 1 楼说的,会做隐式转换。你要把 bool 输出为 true false 只能自己判断类型然后拼接字符串
    return $b="age=".(is_bool($a)?($a?"true":"false"):$a)
    realpg
        17
    realpg  
       2020-08-09 11:48:22 +08:00
    @xxbutoo #14

    你已经无法隐藏你的菜了……

    你想咋样就咋样?

    编程语言已经规定好了一切

    先看好 echo 、 . 的定义
    windychen0
        18
    windychen0  
       2020-08-09 12:58:02 +08:00
    #8 和 #10 不是已经解决问题了吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1924 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:18 · PVG 00:18 · LAX 08:18 · JFK 11:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.