PHP echo 出来的 bool 类型的值,为什么会被转成 int? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xxbutoo
V2EX    PHP

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

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

    如题:

     $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  
    PRO
       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     Solana     2485 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:35 PVG 13:35 LAX 22:35 JFK 01:35
    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