推荐用 strlen($str) > 0(明确高效),或 trim($str) !== ''(过滤空白后判断);避免仅用 !empty($str),因其对'0'等误判;类型不确定时应先 is_string() 校验。

在 PHP 8.0 中,判断字符串“长度不为空”,本质是判断它是否为非空字符串(即长度 > 0 且为 string 类型)。最直接、安全、推荐的方式是使用 strlen() 配合严格比较,或更简洁的 str_len() !== 0,但需注意类型和潜在陷阱。
✅ 推荐:用 strlen($str) > 0(明确、高效、兼容)
这是最直观、无歧义的方式,适用于绝大多数场景:
-
strlen()在 PHP 8.0 中对非字符串类型会触发E_WARNING(如传入null、array),因此建议先确保变量是字符串; - 若已知变量可能为
null或其他类型,可结合is_string()使用:
if (is_string($str) && strlen($str) > 0) {
// $str 是非空字符串
}✅ 更健壮:用 trim($str) !== ''(自动过滤空白)
如果业务上认为“只含空格、制表符、换行符”的字符串也属于“空”,那就该用 trim():
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
-
trim()会移除首尾空白字符,再判断是否为空字符串; - 它对
null、false、0等会静默转成空字符串(如trim(null) === ''),所以无需额外类型检查; - 适合表单输入、用户提交等需要忽略空白的场景。
if (trim($str) !== '') {
// 非空且去除首尾空白后仍有内容
}⚠️ 不推荐:仅用 !empty($str)(有隐式转换风险)
empty() 判定为 true 的值包括:''、0、'0'、null、false 等。例如:
立即学习“PHP免费学习笔记(深入)”;
-
empty('0')→true(但它是长度为 1 的有效字符串); -
empty(0)→true(但你本意可能是判断字符串,而非数字); - 容易误判,语义不清晰,不建议用于纯字符串长度判断。
? 小技巧:PHP 8.0 可用属性提升写法(可选)
如果你在类中频繁校验,可封装为方法,利用 PHP 8.0 的联合类型和返回类型声明增强可靠性:
function hasContent(string|null $str): bool
{
return is_string($str) && strlen($str) > 0;
}
<p>// 调用
if (hasContent($input)) { /<em> ... </em>/ }


















