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

2020-08-08 03:58:43 +08:00
 xxbutoo

如题:

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

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

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

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

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

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

你想咋样就咋样?

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

先看好 echo 、 . 的定义
windychen0
2020-08-09 12:58:02 +08:00
#8 和 #10 不是已经解决问题了吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/696631

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX