PHP检查字符串是否为空的最佳方法

Yad*_*ada 24 php

我已经看到很多php代码执行以下操作来检查字符串是否有效:

$ str是一个字符串变量.

if (!isset($str) || $str !== '') {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢这样做

if (strlen($str) > 0) {
  // something
}
Run Code Online (Sandbox Code Playgroud)

第二种方法有什么问题可以出错吗?我应该注意哪些铸造问题?

JYe*_*ton 28

if (isset($stringvar) && $stringvar !== '') {
}
Run Code Online (Sandbox Code Playgroud)

empty()如果要考虑,您还可以添加以消除空格.

编辑:

请注意,对于像' $stringvar !== '''这样的字符串,这将返回true,而isset($stringvar)不会.

  • 是.考虑字符串''0',其中`empty()`将返回true,而`strlen()`则不会. (16认同)
  • 这比`strlen($ str)> 0更糟糕,因为它认为`"0"`是一个空字符串. (12认同)
  • 我不建议这种方法,因为字符串值""0"`被认为是空的. (6认同)

Gra*_*ble 14

您需要isset()以防万一$str:

if (isset($str) && $str !== '') {
    // variable set, not empty string
}
Run Code Online (Sandbox Code Playgroud)

使用!empty()会有一个重要的警告:字符串'0' 计算结果为false.


此外,有时候人们想要检查,这$str不是假的,比如falsenull[1].以前的代码不处理这个问题.这是松散比较可能有用的罕见情况之一:

if (isset($str) && $str != '') {
    // variable set, not empty string, not falsy
}
Run Code Online (Sandbox Code Playgroud)

上面的方法很有意思,因为它仍然简洁,不会过滤掉'0'.但如果您使用它,请确保记录您的代码.

否则,您可以使用此等效但更详细的版本:

if (isset($str) && (string) $str !== '') {
    // variable set, not empty string, not falsy
}
Run Code Online (Sandbox Code Playgroud)


当然,如果您确定$str已定义,则可以省略isset($str)上述代码.


最后,考虑到这一点'' == false,'0' == false但是'' != '0',您可能已经猜到了:PHP比较不是传递性的(包括有趣的图形).


[1]注意isset()已经过滤掉了null.


Pet*_*uck 7

这将安全地检查只包含空格的字符串:

// Determines if the supplied string is an empty string.                                                                                 
// Empty is defined as null or containing only whitespace.                                                                               
// '0' is NOT an empty string!                                                                                                           
function isEmptyString($str) {
  return !(isset($str) && (strlen(trim($str)) > 0));
}
Run Code Online (Sandbox Code Playgroud)