2009-04-09 5 views
22

Possible en double:
Fixing the PHP empty functionPHP: quelle alternative à empty(), où la chaîne "0" n'est pas traitée comme vide?

En PHP, vide() est un grand raccourci car il vous permet de vérifier si une variable est définie et non vide en même temps.

Que utiliseriez-vous lorsque vous ne voulez pas que "0" (en tant que chaîne) soit considéré comme vide, mais vous voulez toujours que false, null, 0 et "" soient traités comme vides?

qui est, je me demande si vous avez votre propre raccourci pour cela:

if (isset($myvariable) && $myvariable != "") ;// do something 
if (isset($othervar ) && $othervar != "") ;// do something 
if (isset($anothervar) && $anothervar != "") ;// do something 
// and so on, and so on 

Je ne pense pas que je peux définir une fonction d'aide pour cela, puisque pourrait être la variable non définie (et donc n'a pas pu être passé en paramètre).

+0

Je pense que je réalise maintenant qu'il n'y a aucune solution à ceci - au moins pas un qui peut rendre ce code plus court. – thomasrutter

+0

Hmm .. D'accord avec vous – mysqllearner

Répondre

1

La réponse à cela est qu'il n'est pas possible de raccourcir ce que j'ai déjà.

La suppression des notifications ou des avertissements n'est pas quelque chose que je veux faire, donc je devrai toujours vérifier si empty() ou isset() avant de vérifier la valeur, et vous ne pouvez pas vérifier si quelque chose est vide() ou isset() dans une fonction.

3
 
if ((isset($var) && $var === "0") || !empty($var)) 
{ 

} 

De cette façon, vous entrerez dans le cas-construire si la variable est définie et est "0", OU la variable est définie et non = null ("0", null, false)

+0

Cela semble tout à fait correct; ce n'est pas vraiment un raccourci pour if (isset ($ myvariable) && $ myvariable! = "") bien que ce soit plus long. Merci d'avoir répondu. – thomasrutter

21

Cette devrait faire ce que vous voulez:

function notempty($var) { 
    return ($var==="0"||$var); 
} 

Éditer: Je suppose que les tableaux ne fonctionnent que dans l'aperçu, pas dans les réponses réelles. Alors s'il vous plaît se référer à la PHP type comparison tables pour plus d'informations.

 
notempty("")  : false 
notempty(null)  : false 
notempty(undefined): false 
notempty(array()) : false 
notempty(false) : false 
notempty(true)  : true 
notempty(1)  : true 
notempty(0)  : false 
notempty(-1)  : true 
notempty("1")  : true 
notempty("0")  : true 
notempty("php") : true 

Fondamentalement, notempty() est le même que! Empty() pour toutes les valeurs sauf pour "0", pour lequel il retourne vrai.


Éditer: Si vous utilisez error_reporting (E_ALL), vous ne serez pas en mesure de transmettre une variable indéfinie aux fonctions personnalisées par valeur. Et comme le fait remarquer mercator, vous devez toujours utiliser E_ALL pour se conformer aux meilleures pratiques. This link (commentaire # 11), il explique pourquoi vous ne devriez utiliser aucune forme de suppression d'erreur pour des raisons de performance et de maintenabilité/débogage.

Voir la réponse de orlandu63 pour savoir comment transmettre les arguments à une fonction personnalisée by reference.

+2

Cela échouera si la variable n'est pas définie. – mercator

+0

Comment voulez-vous dire? Si une variable indéfinie est passée, la fonction renvoie false - ce qui est l'opposé de ce que renvoie empty(): http://us2.php.net/manual/en/types.comparisons.php C'est le comportement souhaité. – Calvin

+1

Il n'échoue pas, mais produit un avertissement. Donc, bien que cela fonctionne, ce n'est pas la bonne façon (tm). Vous devriez utiliser isset() avant de vérifier la variable avec === –

0
if(isset($var) && ($var === '0' || !empty($var))) 
{ 
} 
0
function Void($var) 
{ 
    if (empty($var) === true) 
    { 
     if (($var === 0) || ($var === '0')) 
     { 
      return false; 
     } 

     return true; 
    } 

    return false; 
} 
+0

Cela pose le problème que si $ var n'est pas défini, il échoue dès qu'il est passé en argument (à une fonction autre qu'iset ou vide, telle que votre fonction Void). Je pense que ce que je voulais est en fait impossible, désolé. – thomasrutter

9
function isempty(&$var) { 
    return empty($var) || $var === '0'; 
} 

La clé est l'opérateur &, qui passe par la variable reference, créant si elle n'existe pas.

+0

Pensée intelligente, est-ce que cela ne produirait toujours pas d'erreur (ou d'avertissement, ou de remarque) si $ var n'existe pas? – thomasrutter

+3

En fait, cette fonction fait en sorte qu'une variable indéfinie soit définie (comme nulle), sans émettre d'erreur ou de notification d'aucune sorte. – Brilliand

0

Si ($ var!= null)

+0

Ce sera une erreur si $ var est indéfini. – thomasrutter

Questions connexes