【发布时间】:2012-01-11 22:04:01
【问题描述】:
我经常看到strlen 被使用。这 2 个测试对于 $str 的所有值是否等效?
is_string($str) && 0 !== strlen($str)
is_string($str) && '' !== $str
【问题讨论】:
-
is_string($str) && '' !== $str是多余的,因为您正在使用 !== 进行测试,已经测试 $str 与 '' 具有相同的类型。 -
@macjohn 这不是多余的,因为
strlen(false)和strlen(null)都评估为0。它确保$str实际上是一个字符串。 -
@ryanve @macjohn 说 second 测试的
is_string($str)部分是多余的。 -
@MДΓΓ БДLL 这两种情况都不是多余的。考虑
$str可能是非字符串类型,如数组或布尔值。 -
在第一种情况下,如果 $str 不是字符串,并且您不测试 $str 是否为字符串,则 strlen 将抛出错误,因为它需要一个字符串作为参数。在第二种情况下,!== 运算符同时测试类型和内容。