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


Is There A Difference Between strlen()==0 and empty()?

我在看别人写的一些表单验证代码,我看到了这个:

strlen() == 0

当测试表单变量是否为空时,我使用empty()函数。一种方法比另一种好吗?它们在功能上等效吗?

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

空的含义:

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

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

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.

以下内容被认为是空的:

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

参考

如果$x = "0",则

empty()将返回true。所以这是有区别的。

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

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

对于表格,我使用isset。它更明确

empty与布尔值false相反。

empty是一种语言结构。

CCD_ 9是一个函数。

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

CCD_ 11是字节长度为0的比较(松散比较(。

如果字符串为空,则该比较将为true,empty($str)的表达式在空(零长度(字符串的情况下也会这样做。

然而,对于其他一切:

empty与boolean false相反。

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

他们彼此分享的不多。

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((-方法。物体是顽固的生物。

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

strlen(array());

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

当输入为0,时

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