2011-08-16 26 views
7

que estaba viendo algún tipo código de validación alguien había escrito y vi esto:¿Existe alguna diferencia entre strlen() == 0 y empty()?

strlen() == 0 

Cuando se prueba para ver si una variable de formulario está vacía utilizo la función empty(). ¿Es una forma mejor que la otra? ¿Son funcionalmente equivalentes?

Respuesta

4

strlen es conseguir el número de caracteres de una cadena, mientras que empty se utiliza para probar si una variable está vacía

Significado de vacío:

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

Lo que usted (y algunos otros) dijeron es exactamente lo que yo pensaba. Nunca había visto a nadie tratar de verificar si una variable estaba vacía usando 'strlen' antes, y no estaba seguro de que su código tuviera el efecto deseado. Gracias a todos por las aclaraciones. – red4d

+0

¿Por qué esta respuesta tan bien legible (y aceptada) solo subió una vez? ¿Hay un error en eso? – mwfearnley

+0

'if (! Strlen ($ _ POST ['id'])) {// blah}' si escribo una condición como esta, ¿qué significa eso? boolen o no.? @ red4d @dpp –

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

Para formularios yo uso isset. Es más explícito. ;-)

6

Los siguientes factores son considerados como vacío:

"" (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() simplemente comprobar si el len la cadena es 0. No comprueba para int, float, etc. ¿Cuál es su situación .

reference

0

empty() es para todos los tipos de variables. strlen(), creo, es mejor usarlo con cadenas o algo que se pueda convertir de manera segura en cadenas. Para examle,

strlen(array()); 

arrojará PHP Warning: strlen() expects parameter 1 to be string, array given error

7

Hay un par casos en los que tendrán un comportamiento diferente:

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. 
0

cuando la entrada es 0,

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

empty es lo contrario de falso booleano.

empty es una construcción de lenguaje.

strlen es una función.

strlen devuelve la longitud de bytes de una cadena.

strlen($str)==0 es una comparación de la longitud de byte 0 (comparación suelta).

Esa comparación dará como resultado verdadero en caso de que la cadena esté vacía, como lo haría también la expresión de empty($str) en el caso de una cadena vacía (de longitud cero).

Sin embargo, para todo lo demás:

empty es lo contrario de falso booleano.

strlen devuelve la longitud de bytes de una cadena.

No comparten mucho entre sí.

+0

Hola, hakre. En primer lugar, permítanme decir que soy realmente cauteloso al cuestionar una declaración de alguien con su representante, pero ¿quiso decir que vacío es lo opuesto a falso? ¿Seguramente verdadero es lo opuesto a falso, y vacío es lo mismo que falso? Quizás estoy envejeciendo ..! –

+1

@GeoffKendall: vea aquí: [PHP: Empty() es el opuesto de una variable booleana] (http://hakre.wordpress.com/2011/04/02/php-empty-is-the-opposite-of -a-boolean-variable /) – hakre

Cuestiones relacionadas