2009-10-26 10 views
1

Je construis des règles de validation simples en php et mon IDE (phped) se plaint de la syntaxe.PHP quel est le problème avec la syntaxe de ce code?

Quelqu'un peut-il me dire ce qui ne va pas avec ce qui suit?

function notBlank($str) { 
    (strlen($str) == 0) ? return false : return true; 
} 

PhpED se plaint de 'retour inattendu'

Tout conseil apprécié.

Merci.

Répondre

13

écrire comme ceci:

function notBlank($str){ 
    return strlen($str) != 0; 
} 
2

écrire comme ceci:

function notBlank($str) { 
    return (strlen($str) == 0 ? false : true); 
} 
+0

Pas besoin d'opérateur ternaire ici. –

+0

Vous pouvez supprimer le faux ou le vrai, puisque l'opérateur renvoie un booléen. – Garrett

+0

bien sûr, ceci est juste mon style de codage ... –

2

Tu ne peux pas le retour d'une utilisation dans les opérateurs ternaires. Si vous voulez garder cette syntaxe que vous devez faire quelque chose comme ceci:

function notBlank($str = '') { 
    $var = (strlen($str) == 0) ? false : true; 
    return $var; 
} 

Néanmoins remarquez que la façon de faire les choses par défaut est plus lisible:

function notBlank($str = '') { 
    if(strlen($str) == 0) 
     return false; 
    else 
     return true; 
} 

Hope it helps!

+1

Je ne peux pas dire que j'aime la construction de type "if (x) return false else return true", quand vous pouvez simplement utiliser "return! X". Néanmoins, cela obtient +1 pour répondre à la question initiale de ce qui n'allait pas avec la requête (plutôt que d'expliquer simplement une manière différente de le faire.) – Beska

0

strlen() renvoie 0 lorsque la chaîne est vide et en PHP 0==false. Donc, vraiment, il est inutile d'envelopper strlen() dans une fonction. Si vous voulez insister sur une réponse booléenne, lancez-la. à savoir:

(bool) strlen($string); 

Ainsi, au lieu de votre fonction, qui est assumably appelé dans un si bloc, vous auriez tout simplement avoir

if(strlen($string)) //etc. 
+0

vous pouvez toujours vouloir l'envelopper dans une fonction pour rendre votre code plus facile à comprendre. Qui peut dire que la définition de «vide» ne changera pas à l'avenir? Votre code est mieux à même de gérer les changements de ce type s'il est enveloppé dans une fonction, car il est plus abstrait. – rmeador

+0

@rmeador: pour moi, cela ressemble à une programmation juste au cas. Je serais d'accord que si j'avais l'intention de mettre en œuvre éventuellement une condition plus complexe, créer une fonction serait approprié. Mais si je n'avais pas cette intention, je ne voudrais pas ralentir les appels de fonctions simples en les enveloppant. – dnagirl