strval()和(string)对布尔值转换行为一致,均遵循true→"1"、false→""规则;需手动处理才能得到"true"/"false"字符串,推荐三元表达式或json_encode()(注意引号和类型安全)。

PHP中strval()和强制类型转换的区别
直接用(string)或strval()都能把true转成"1"、false转成""(空字符串),但它们行为一致,不是“可选方案”,而是同一套底层逻辑。PHP对布尔值的字符串化规则是固定的:true → "1",false → "",不取决于你用哪个函数。
常见误解是以为strval(false)会返回"false",实际不会——那是var_export(false, true)或json_encode(false)干的事。
想得到"true"/"false"字符串怎么办
PHP原生不提供自动映射,必须手动处理。最稳妥的是三元表达式或查表法,避免依赖print_r()或var_dump()这类调试函数(它们输出含换行/空格,不适合生产环境)。
-
($bool) ? 'true' : 'false'—— 简洁,推荐用于单次转换 -
['false', 'true'][$bool]—— 利用布尔转整型(false→0,true→1),但要注意$bool必须是严格布尔值,否则下标越界 - 封装成函数:
function bool_to_string($b) { return $b === true ? 'true' : ($b === false ? 'false' : (string)$b); },能防御非布尔输入
JSON序列化为什么看起来“更靠谱”
json_encode(true)返回"true",json_encode(false)返回"false",确实符合直觉。但它本质是生成JSON格式字符串,带双引号,且null也会变成"null"。如果只是做日志或API响应,可以直接用;但如果要拼接HTML属性或SQL语句,得多剥一层引号或额外trim($str, '"')。
注意:json_encode()在PHP 5.6+默认不抛异常,但遇到资源类型或循环引用会返回false,布尔值虽安全,别养成“所有类型都扔给json_encode”的习惯。
容易被忽略的隐式转换陷阱
PHP在字符串拼接时会自动转布尔:'result: ' . true → "result: 1",'status: ' . false → "status: "(末尾没字符)。这种隐式行为常导致日志错位或前端显示空白,尤其在模板里混用<?php echo $active . 'class'; ?>时,$active = false会让结果变成"class",破坏CSS。
检查这类问题的方法:开启E_NOTICE,虽然布尔转字符串不报错,但配合empty()或==比较时,false == ''为真,而false === ''为假——类型混淆才是多数bug根源。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











