最直接、安全、无歧义的方式是 $str === '';因 strlen() 对非字符串参数触发警告,empty() 和 == 会误判 '0' 等值,而 === '' 精准匹配空字符串语义,兼顾性能与可靠性。

PHP 7.0 中判断字符串长度是否等于 0,最直接、安全、无歧义的方式是:$str === ''。这不是“绕路”,而是精准匹配“空字符串”语义的唯一推荐写法。
为什么不用 strlen($str) === 0?
虽然 strlen('') 确实返回 0,但该函数有严重类型限制:
- 传入
null、false、0、[]等非字符串值会触发 Warning(如Warning: strlen() expects parameter 1 to be string, null given) -
strlen(false)在 PHP 7.0 中返回 0(因 false 被隐式转为空字符串),但这属于类型转换副作用,不可靠 - 若变量未定义或为
null,直接调用strlen()就会报错,无法用于健壮判断
为什么不用 empty($str) 或 $str == ''?
它们不是“判断空字符串”,而是“判断空值”:
-
empty('0')返回 true —— 字符串'0'是有效内容,但会被误判为空 -
false == ''、0 == ''都为 true,而'0' == ''是 false,松散比较逻辑不一致 - 业务中常需区分
''(用户没填)、'0'(明确选了零)、null(字段缺失),混用会导致数据丢失或逻辑错乱
真正需要“长度为 0 的字符串”时,就这么写
只有一种写法同时满足:快、准、无警告、不依赖上下文:
if ($str === '') { /* 是空字符串 */ }- 如果还需兼容变量可能未定义,加一层
isset():if (isset($str) && $str === '') - 若要同时剔除空白(如全空格、制表符、零宽字符),先清理再比:
if (trim($str) === '')—— 注意:trim()对null返回'',所以仍建议先isset()
额外提醒:零宽字符和多字节场景
如果字符串可能含 U+200B 等零宽字符(看似空,实际 strlen() 返回 3),=== '' 依然可靠——因为那些字符不是空字符串,它们是“带不可见字符的非空字符串”。此时你要的往往不是“是否为空字符串”,而是“是否可视为空内容”,那就该用:
-
mb_strlen(trim($str), 'UTF-8') === 0(需启用 mbstring) - 或清除零宽字符:
preg_replace('/[\x{200B}-\x{200D}\x{FEFF}]/u', '', trim($str)) === ''
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











