xxbutoo
V2EX  ›  PHP

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

  •  
  •   xxbutoo · Aug 8, 2020 · 4386 views
    This topic created in 2129 days ago, the information mentioned may be changed or developed.

    如题:

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

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

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

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

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

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

    你想咋样就咋样?

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

    先看好 echo 、 . 的定义
    windychen0
        18
    windychen0  
       Aug 9, 2020
    #8 和 #10 不是已经解决问题了吗
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   890 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 22:35 · PVG 06:35 · LAX 15:35 · JFK 18:35
    ♥ Do have faith in what you're doing.