2011-08-16 1 views
7

Je regardais une personne de code de validation de formulaire d'autre avait écrit et j'ai vu ceci:Y at-il une différence entre strlen() == 0 et empty()?

strlen() == 0 

Lors du test pour voir si une variable de formulaire est vide utiliser la fonction empty(). Est-ce qu'un moyen est meilleur que l'autre? Sont-ils fonctionnellement équivalents?

Répondre

4

strlen est d'obtenir le nombre de caractères dans une chaîne en empty est utilisé pour tester si une variable est vide

Signification de vide:

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

Ce que vous (et quelques autres) avez dit est exactement ce que je pensais. Je n'avais jamais vu quelqu'un essayer de vérifier si une variable était vide en utilisant 'strlen' auparavant, et je doutais que leur code ait eu l'effet voulu. Merci à tous pour les clarifications. – red4d

+0

Pourquoi cette réponse joliment lisible (et acceptée) n'a-t-elle été mise à jour qu'une seule fois? Y a-t-il une erreur? – mwfearnley

+0

'if (! Strlen ($ _ POST ['id'])) {// blah}' si j'écris une condition comme celle-ci, qu'est-ce que cela signifie? boolen ou pas.? @ red4d @dpp –

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

Pour les formulaires j'utilise isset. C'est plus explicite. ;-)

6

Les choses suivantes sont considérées comme vides:

"" (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() vérifier simplement si la la chaîne len est 0. Il ne vérifie pas int, float etc. Quelle est votre situation .

reference

0

empty() est pour tous les types de variables. strlen(), je pense, est préférable d'utiliser des cordes ou quelque chose qui peut être coulé en toute sécurité aux chaînes. Pour examle,

strlen(array()); 

jetteront PHP Warning: strlen() expects parameter 1 to be string, array given erreur

7

Il y a un couple les cas où ils auront un comportement différent:

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

lorsque l'entrée est 0,

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

empty est à l'opposé du faux booléen.

empty est une construction de langage.

strlen est une fonction.

strlen renvoie la longueur des octets d'une chaîne.

strlen($str)==0 est une comparaison de la longueur de l'octet étant 0 (comparaison en vrac). Cette comparaison donnera true si la chaîne est vide - comme le ferait l'expression de empty($str) dans le cas d'une chaîne vide (de longueur nulle).

Cependant, pour tout le reste:

empty est le contraire de faux booléen.

strlen renvoie la longueur des octets d'une chaîne.

Ils ne partagent pas beaucoup entre eux.

+0

Salut hakre. Tout d'abord, permettez-moi de dire que je me méfie vraiment de remettre en cause une déclaration faite par quelqu'un de votre représentant, mais vouliez-vous dire que le vide est le contraire du faux? Sûrement vrai est le contraire de faux, et vide est le même que faux? Peut-être que je deviens vieux ..! –

+1

@GeoffKendall: S'il vous plaît voir ici: [PHP: Empty() est l'opposé d'une variable booléenne] (http://hakre.wordpress.com/2011/04/02/php-empty-is-the-opposite-of -a-boolean-variable /) – hakre

Questions connexes