Jump to content


Photo

Dois True Em Um If


  • Faça o login para participar
5 replies to this topic

#1 finish

finish

    12 Horas

  • Usuários
  • 144 posts
  • Sexo:Não informado

Posted 09/12/2008, 11:12

Galera,

Olha só, qual é a diferença entre:

[codebox]
$t2 = $v_user->ValidaSimples();
$t = $v_pass->ValidaSimples();

if($t2 and $t)
{
echo"OK";
}
else
{
echo"Falha";
}
[/codebox]

================================

[codebox]
if($v_user->ValidaSimples() and $v_pass->ValidaSimples())
{
echo"OK";
}
else
{
echo"Falha";
}
[/codebox]

================================

Os métodos que eu chamo chamados ValidaSimples retornan true ou false, ou seja, se for ambos true ele imprime OK, se um deles for false irá imprimir falha.

Eis o problema, no 1º exemplo ele faz certinho, no segundo, tendo o método no IF, ele só le o primeiro método, pq isso ?

Edição feita por: Dudu, 09/12/2008, 12:14.
Utilize [codebox][/codebox]


#2 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 09/12/2008, 15:33

Primeiro: não utilize "and" é tão "demodê" esta instrução, prefira && (mais rápido de digitar).
Segundo: sempre "aninhe" seus condicionais. Para ficar um bom código, entendível em qualquer circustância.
Terceiro: Evite dar quebra de linha somente para abrir uma chave ("{"), é uma linha a mais no seu script e inútil, agrupe ela junto com o condicional. Isto é mais o jeito de programar mesmo. Mas fica a dica.
Quarto: Quando utilizar condicionais de uma linha só o TRUE/FALSE, omita as chaves, fica mais rápido para você digitar e você poupa uma linha no fechamento do ELSE.

Bem ... eu faria assim:

if(($v_user->ValidaSimples()) && ($v_pass->ValidaSimples()))
   echo"OK";
else
	echo"Falha";

Experimente isto para ver se realmente os dois são TRUE:

var_dump(($v_user->ValidaSimples()) && ($v_pass->ValidaSimples()));

Se der false, um dois dois está com problema, sei lá. Talvez tenha que "degugar" as duas funções.

Espero ter lhe auxiliado.

[]'s

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#3 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 09/12/2008, 16:18

não utilize "and"

:blink:
o motivo é pq fica mais rápido de digitar mesmo?

#4 georgewar

georgewar

    Let's upgrade myself

  • Usuários
  • 169 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro - RJ
  • Interesses:PHP - JavaScript

Posted 09/12/2008, 17:13

nao vejo diferença se tratando de true ou false

#5 fly2k

fly2k

    Super Veterano

  • Usuários
  • 2262 posts
  • Sexo:Não informado

Posted 10/12/2008, 06:15

@Savior: Legal seria você indicar padrões a ele. Eu já vi padrões parecidos com esse (tirando a falta de identação)
Há outras razões para existir && e and

@finish e @georgewar:

A diferença é sobre o próprio uso dos operadores. Quando se utiliza os operadores && e and, eles significam que devem só deve retornar true se os dois testes são verdadeiros. Se o primeiro teste retornar false, ele nem executa o segundo teste.

No || ou or, todos os testes são executados.

No seu caso, você pode utilizar o operador & que vai executar ambos os testes, indiferente do primeiro teste ter falhado ou não.

Leia mais sobre operadores:
http://www.manjaphp....l-gicos-parte-1
http://www.manjaphp....l-gicos-parte-2
Quer aprender PHP? -> www.manjaphp.com.br
Tutoriais, código colaborativo (pastebin), curso de PHP, artigos e etc.

#6 finish

finish

    12 Horas

  • Usuários
  • 144 posts
  • Sexo:Não informado

Posted 10/12/2008, 07:26

Perfeito fly2k, é isso mesmo, nunca tinha reparado neste detalhe de não testar a segunda opção caso a primeira ja tenha dado false...

Edição feita por: finish, 10/12/2008, 07:28.





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq