8

我正在查看其他人编写的一些表单验证代码,我看到了这个:

strlen() == 0

在测试表单变量是否为空时,我使用该empty()函数。一种方式比另一种更好吗?它们在功能上是否相同?

4

9 回答 9

9

在几种情况下,它们会有不同的行为:

empty('0'); // returns true, 
strlen('0'); // returns 1.

empty(array()); // returns true,
strlen(array()); // returns null with a Warning in PHP>=5.3 OR 5 with a Notice in PHP<5.3.

empty(0); // returns true,
strlen(0); // returns 1.
于 2011-08-16T02:26:55.017 回答
7

以下内容被认为是空的:

"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)

strlen() 只是检查字符串 len 是否为 0。它不检查 int、float 等。你的情况是什么。

参考

于 2011-08-16T02:24:59.543 回答
7

strlen是获取字符串中的字符数 whileempty用于测试变量是否为空

空的意思:

empty("") //is empty for string
empty(0) // is empty for numeric types
empty(null) //is empty 
empty(false) //is empty for boolean
于 2011-08-16T02:25:25.337 回答
2
$f = 0; echo empty($f)? 'Empty':'Full'; // empty
$f = 0; echo strlen($f); // 1

对于我使用的表格isset。它更明确。;-)

于 2011-08-16T02:24:50.930 回答
2

empty()如果 . 将返回 true $x = "0"。所以有区别。

http://docs.php.net/manual/en/types.comparisons.php

于 2011-08-16T02:25:20.290 回答
2

empty与布尔假相反。

empty是一种语言结构。

strlen是一个函数。

strlen返回字符串的字节长度。

strlen($str)==0是字节长度为 0 的比较(松散比较)。

如果字符串为空,则该比较将导致 true - 就像empty($str)在空(零长度)字符串的情况下 do 的表达式一样。

但是对于其他一切:

empty与布尔假相反。

strlen返回字符串的字节长度。

他们彼此分享的不多。

于 2011-08-16T03:21:21.410 回答
1

如果您想检查某些内容是否为“空字符串”,则该strlen方法几乎是完美的,也就是说,当单个零不应被视为空字符串,空数组,null 和 false 都应该被视为没有值时。这是经常需要的。

所以我的建议是:

    count($x)*strlen("$x")

这给了你:

  • 0 为假

  • 0 为空

  • 0 代表“”(空字符串)

  • 0 表示 [ ](空数组),没有警告

  • 1 表示数字零

  • 1 表示“0”(字符串零)

当然你可以做到empty($x) && "$x"!=="0"- 它更重要但有点吵,而且令人惊讶的是它们的时间成本几乎相等(一百万次迭代不到 50 毫秒),所以没有理由选择另一个。此外,如果您!!在 strlen 之前添加 (boolean cast),您将得到该问题的明确 0/1 答案,有时它可能比 true/false(调试情况、切换等)更方便。

另请注意,不能像这样检查对象。如果有可能出现对象,请使用 empty() 方法。物体是顽固的生物。

于 2019-12-19T14:12:51.017 回答
0

empty()适用于所有变量类型。strlen(),我认为,最好与字符串或可以安全地转换为字符串的东西一起使用。例如,

strlen(array());

会抛出PHP Warning: strlen() expects parameter 1 to be string, array given错误

于 2011-08-16T02:25:05.580 回答
0

当输入为 时0

strlen(0) = 1
empty(0) = false <-- non-empty
于 2011-08-16T02:27:08.823 回答