strlen()== 0和empty()之间有区别吗?

时间:2011-08-16 02:19:27

标签: php strlen

我正在查看其他人写过的表格验证码,我看到了:

strlen() == 0

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

9 个答案:

答案 0 :(得分:7)

有几种情况会有不同的行为:

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.

答案 1 :(得分:6)

以下内容被认为是空的:

"" (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等。你的情况如何。

reference

答案 2 :(得分:5)

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

空的意思:

empty("") //is empty for string
empty(0) // is empty for numeric types
empty(null) //is empty 
empty(false) //is empty for boolean

答案 3 :(得分:2)

$f = 0; echo empty($f)? 'Empty':'Full'; // empty
$f = 0; echo strlen($f); // 1

对于表单,我使用isset。它更明确。 ; - )

答案 4 :(得分:2)

如果empty()

$x = "0"将返回true。所以有区别。

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

答案 5 :(得分:2)

empty与布尔值false相反。

empty是一种语言结构。

strlen是一个功能。

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

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

如果字符串为空,那么比较结果为真 - 如果空(零长度)字符串的情况下empty($str)的表达式也是如此。

然而对于其他一切:

empty与布尔值false相反。

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

他们彼此分享不多。

答案 6 :(得分:0)

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

strlen(array());

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

答案 7 :(得分:0)

输入为0

strlen(0) = 1
empty(0) = false <-- non-empty

答案 8 :(得分:0)

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

所以我的建议是:

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

这给您:

  • 0为假

  • 0为空

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

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

  • 1代表数字零

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

您当然可以做empty($x) && "$x"!=="0"-重点是要点,但要吵一点,而且令人惊讶的是,它们的时间成本几乎相等(在一百万次迭代中,不到50ms),因此没有理由选择一个。另外,如果在strlen之前添加!!(布尔类型转换),您将获得一个清晰的0/1答案,有时它比true / false(调试情况,切换等)更方便。

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