不能。php 7.0 中 strlen() 完全不支持对象,传入未定义 __tostring() 的对象会触发致命错误;即使有 __tostring(),也仅返回其转换后字符串的字节长度,而非对象本身结构信息。

不能。PHP 7.0 中的 strlen() 函数**完全不支持对象**,直接传入对象会触发致命错误或警告,并返回不可靠结果。
为什么对象不能用 strlen()
strlen() 的设计目标是接收字符串(string)类型参数。当传入对象时:
- PHP 会尝试调用对象的
__toString()方法将其转为字符串; - 如果该对象**没有定义**
__toString(),则立即抛出Fatal error: Object of class X could not be converted to string; - 如果定义了但返回非字符串(如 null、数组),仍会报错或触发 warning;
- 即使成功转出字符串,strlen() 测的也只是转换结果的字节长度,而非对象本身的“结构长度”或属性数量——这已偏离业务意图。
想测对象内容长度?得先明确你要什么
“对象的长度”没有统一定义,需按实际需求选择处理方式:
-
想看 JSON 序列化后多长? 先
json_encode($obj),再用strlen()(注意 BOM 和类型校验); -
想统计对象有多少个公开属性? 用
count(get_object_vars($obj)); -
想获取对象转成字符串后的字符数(如含中文)? 确保
__toString()返回 UTF-8 字符串,再用mb_strlen($obj, 'UTF-8'); -
只是想安全跳过非字符串? 务必前置判断:
is_string($var) && strlen($var) === 0或更推荐$var === ''。
常见错误写法(务必避免)
以下代码在 PHP 7.0 中均不安全:
-
strlen($userObj)—— 未实现__toString()就崩溃; -
array_map('strlen', $arrOfObjects)—— 遇到任一对象即中断或报 warning; -
empty($obj)或$obj == ''—— 语义混乱,且可能意外触发__toString()副作用。
对象不是字符串,别拿字符串函数硬套。先明确目标,再选对工具。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











