【问题标题】:check for strings that are at least 1 character long检查至少 1 个字符长的字符串
【发布时间】: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 将抛出错误,因为它需要一个字符串作为参数。在第二种情况下,!== 运算符同时测试类型和内容。

标签: php string strlen


【解决方案1】:

是的,这两个语句在逻辑上是等价的。我喜欢给这只猫剥皮的方法:

is_string($str) && !empty($str)

...虽然empty('0')truesigh,PHP...),所以这可能更好:

$str !== ''

另请参阅:Checking if the string is emptyIs there a difference between $str == '' and strlen($str) == 0 in PHP?

【讨论】:

    【解决方案2】:

    是的,它们是一样的..

    我会使用:

    is_string($str) && strlen($str) > 0
    

    【讨论】:

    • Thx - 如果它们相同,那么为什么要使用需要额外函数调用的那个呢?我认为使用 strlen 可能会更快,但我在性能方面对其进行了测试,它们非常接近,以至于很难判断哪个更快。
    【解决方案3】:

    它们非常接近,除了 strlen() 将为 NULL 字符串返回 0,因此如果您的 $strNULL,则第一个测试中的 0 !== strlen($str) 表达式将计算为 @987654327 @,而您第二次测试中的 '' !== $str 将评估为 false

    【讨论】:

    • ...但这在很大程度上无关紧要,因为is_string(null) 返回false,所以两个表达式无论如何都会返回false
    • @NullUserException: 准确地说,只是一个观察 :)
    • empty 的“更大”问题是 empty('0')true
    【解决方案4】:

    试试这个

    strlen($str) > 0
    

    !== 是强类型,可能无法正确匹配 0。

    【讨论】:

    • 我更喜欢检查 $str 是否也是一个真正的字符串。
    • @Pallazzo 是的,你一定要确保它是一个字符串。我想这就是肖恩的意思。
    • strlen() 如果将数组作为参数输入,则在 5.3 之前表现得很愚蠢。您将获得长度 5,因为数组类型转换为字符串“Array”。所以这不是用一块石头杀死2只鸟的理想方法;你仍然需要验证它是一个字符串。
    • 是的,我知道您可能想要测试字符串,但这很简单。而使用 !== 通常会破坏事情
    • @Sean H Jenkins 我知道!= 可能会破坏事情,但!== 似乎很好。什么意思?
    猜你喜欢
    • 2011-10-13
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    相关资源
    最近更新 更多