2009-08-23 9 views
1

Comment pouvez-vous obtenir 1 en sortie de # 2?Comprendre && en PHP si -clause

# 1

j'ai couru ce code

echo validate_email ($email); 
echo validate_password ($password); 
echo validate_username ($username); 

Je reçois

111 

ce qui signifie que tout est ok.

# 2

J'exécuter ce code

function validate ($email, $password, $username) { 
    if ( (validate_email ($email) == 1) 
     AND (validate_password ($password) == 1) 
     AND (validate_username ($username) == 1)) 
      return 1; 
} 
echo validate ($email, $password, $username); 

je reçois rien comme ouput.

J'ai essayé de résoudre le problème en changeant AND à && mais la même sortie reste. La sortie doit être 1.

Répondre

6

Vous n'obtenez rien comme sortie parce que vous êtes seulement retournant1, ne pas l'écho réellement. Les choses ne sont pas répercutées sur l'utilisateur à moins que vous n'ayez dit à PHP de le faire.

Exemple:

function test() { 
    if ( (validate_email ($email) == 1) 
     AND (validate_password ($password) == 1) 
     AND (validate_username ($username) == 1)) 
      return 1; 
    else 
      return 0; 

echo test(); 

De plus, voici quelques points sur if en général:

  • Vous devriez probablement utiliser && au lieu de AND que le premier est plus commun.
  • Vous n'avez pas besoin du bit == 1 - 1 est toujours TRUE. Exemple:

    if (validate_email($email)) // correct email 
    

    Au lieu de:

    if (validate_email($email) == 1) // correct email 
    
+0

Le 'echo' manquant était un bogue dans ma question. Je l'ai corrigé. J'ai enlevé ces '== 1' dans mon code, et le code a commencé à fonctionner comme expectde. - Cela me suggère que deux dernières lignes de code ne sont pas équivalentes. C'est étrange, puisque les deux lignes devraient être équivalentes. –

+1

@Masi: vos fonctions de validation _ *() retournent probablement vrai au lieu de 1, c'est pourquoi la comparaison stricte (=== au lieu de ==) ne fonctionnait pas. –

2

Dans le premier exemple, vous écho la sortie de chaque fonction. Dans le second exemple, vous revenez 1 si tous égaux 1.

Revenant quelque chose ne sort pas à STDOUT. Vous devez faire écho si vous le souhaitez.