Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bem, galera, eu estava dando uma olhada nos códigos da pasta System do Codeigniter, e vi que ele usa, em cada ocasião, um operador lógico diferente.
Vi no arquivo \System\core\Loader.php:
// Isso...if ( ! $file_exists && ! file_exists($_ci_path)){ show_error('Unable to load the requested file: '.$_ci_file);} // ... Isso //
if ($library == '' OR isset($this->_base_classes[$library])){ return FALSE;} // ... e Isso //
if (is_array($vars) AND count($vars) > 0){ foreach ($vars as $key => $val) { $this->_ci_cached_vars[$key] = $val; }}
Quer dizer, foram usados AND, OR e &&.
Eu li aqui no fórum a questão da Precedência de Operadores Lógicos.
Isso está certinho? Ou é mais uma das "pequenas confusões" do Framework CodeIgniter (já ouvi falar tanto mal dele, que já não me estranharia ser mais um detalhe criticável) ?
O recomendável não seria usar && e ||?
A diferença está na precedência: http://www.php.net/manual/en/language.operators.logical.php
Contudo, não posso afirmar sobre o caso específico para os códigos do CI.
>
Todas as funções estão corretas...
$correto != $recomendavel; // pelo menos no meu ponto de vista
Sei que está "correto", pois funciona. A questão que quero saber é se isso é "recomendável", tendo em vista Precedência dos Operadores.
Pois o próprio manual do PHP diz (trechos que o Hinon acabou de me passar):
>
- A razão para as duas variantes dos operandos "and" e "or" é que eles operam com precedências diferentes.
- "||" tem maior precedência que "or"
Aí vem os exemplos:
$g = true && false; // return FALSE
$h = true and false; // return TRUEcara se eu entedi a sua pergunta você quer saber o que e AND e OR
AND = &&
OR = ||
ex:
//vai retornar errado por que "AND" significa esse "e" aquele tem que ser verdadeiro
if(1 = 1 and 1 = 2){echo 'ok';}else{echo 'errado';}
//vai retornar ok por que "OR" significa esse "ou" aquele tem que ser verdadeiro
if(1 = 1 ou 1 = 2){echo 'ok';}else{echo 'errado';}
eu constumo usar AND e OR, mais não estão errados usar && e ||
exemplo documentação php
<?php
$a = 'some string';
$b = 123;
$c = 0;
if($a && $b && (!$c))
{ echo "True.\n"; } else { echo "False.\n"; }
if($a == true && $b == true && $c == false)
{ echo "True.\n"; } else { echo "False.\n"; }
if($a === true || $b === true || $c === false)
{ echo "True.\n"; } else { echo "False.\n"; }
?>É correto qualquer um dos operadores levando em consideração que isto é apenas diferença da herança e implementação da linguagens os dois são a forma indicada para uso
cara se eu entedi a sua pergunta você quer saber o que e AND e OR
Negativo. Já sei o que AND e OR fazem ( :yes: de boa, quem não sabe traduzir essas palavras?)
A questão foi:
O recomendável não seria usar && e ||?
É correto qualquer um dos operadores levando em consideração que isto é apenas diferença da herança e implementação da linguagens os dois são a forma indicada para uso
Desculpa, "os dois" o quê? && e || ?
vixi..
var_dump( true && false ); //false
var_dump( true and false ); //false
ok.. mas então, o que significa precedência ?
Significa, ser processado primeiro, ter preferência.
Num caso desse aqui:
var_dump( true or true and false ); //bool(true) == var_dump( true or (true and false) );
var_dump( true || true and false ); //bool(false) == var_dump( (true or true) && false );ai sim explica.
Veja a equivalência que coloquei no comentário. É como se eu tivesse agrupado os operadores lógicos de forma diferente, o que gera resultados diferentes. É nisso que a precedência interfere.
E sim, é uma má prática fazer dessa forma. Deveriam ter escolhido um estilo de operador e usar só ele.
Ficar "misturando" só gera complicação ao ler o código além de gerar incoerências.
eu acho que vai de cada um, particularmente uso AND e OR, como falei acima.
e && e || também pode ser usado,
não tem um certo e um errado os 2 são corretos pois os 2 são padrão na documentação do PHP
só olhar no manual do php -> http://php.net/manual/pt_BR/language.operators.comparison.php
tem os 2 exemplos, se fosse errado não tinha esses operadores de comparação && e ||.
#5, #6 Não...
A diferença está na precedência..
>
Deveriam ter escolhido um estilo de operador e usar só ele.
Ficar "misturando" só gera complicação ao ler o código.
verdade isso, não errado usar AND e || ou && e || , mais se for usar
AND e || apenas eles , se for && e || apenas eles, não misturar.
não tem um certo e um errado os 2 são corretos pois os 2 são padrão na documentação do PHP...
Mas tem o Recomendável, como disse o William Bruno. Pois eu posso usar o strlen() e o mb_strlen() para fazer a mesma coisa (calcular o tamanho duma string), mas um é mais eficaz que o outro.
tem os 2 exemplos, se fosse errado não tinha esses operadores de comparação && e ||.
As funções do mysql também estão lá, mas o PDO é mais seguro. Ter no PHP não é significa que podemos sair usando qualquer coisa, sem manter um padrão, e avacalhar o colega programador que vem mexer no nosso código no futuro. :closedeyes:
Eu também poderia usar um
if( isset($_SESSION) && $_SESSION['logado''])
ou
if( @$_SESSION['logado'] )
Irão funcionar, mas não ficou nada bonito essa arroba monstruosa!
>
E sim, é uma má prática fazer dessa forma. Deveriam ter escolhido um estilo de operador e usar só ele.
Ficar "misturando" só gera complicação ao ler o código além de gerar incoerências.
Era isso que eu queria saber. Quando vi a "mistureba", me pareceu ter sido "feito pelos cocos".
#9...
AND, OR são operadores lógicos.. diferente de operadores de comparação.
O link que estás indicando é sobre operadores de comparação.
Veja o link de operadores lógicos no post #3.. ou aqui
mais:
http://stackoverflow.com/questions/2803321/and-vs-as-operator
http://stackoverflow.com/questions/5998309/logical-operators-or-or
aiaiai isso aqui vai dar uma longaaaaaaaaaa conversa.
mais o PDO também tem no manual do PHP, como você sabe que PDO e melhor que mysql_query? por que ja usou mysql_query e ja viu varios posts na net falando as desvantagens de mysql_query, quanto pdo e tudo tratado antes de entrar na query.
esse @ que eu saiba e para esconder erro caso aja, não e nem aconselhável usar.
if( @$_SESSION['logado'] )
eu sei que tem varias formas de programar, mais você perguntou
O recomendável não seria usar && e ||?
não e que seja errado, mais eu sou acostumado a usa como falei a cima AND e OR
>
#9...
AND, OR são operadores lógicos.. diferente de operadores de comparação.
O link que estás indicando é sobre operadores de comparação.
Veja o link de operadores lógicos no post #3.. ou aqui
mais:
http://stackoverflow.com/questions/2803321/and-vs-as-operator
http://stackoverflow.com/questions/5998309/logical-operators-or-or
obrigado por me corrigir, peguei o link errado.
pode ter sido um exemplo ou analogia mas está errado:
Pois eu posso usar o strlen() e o mb_strlen() para fazer a mesma coisa (calcular o tamanho duma string), mas um é mais eficaz que o outro.
strlen() não é multibyte safe
mb_strlen() sim, é multibyte safe.
esse exemplo nem cabe aqui pois beira o absurdo. rsrsrsr
if( isset($_SESSION) && $_SESSION['logado''])
ou
if( @$_SESSION['logado'] )
#geral
faça os testes por si mesmos... simples..
veja como há diferença e como a precedência interfere nos resultados:
<?php
if( true and false )
{
echo PHP_EOL . 'ok [and]';
}
if( true && false )
{
echo PHP_EOL . 'ok [&&]';
}
if( true or false )
{
echo PHP_EOL . 'ok [or]';
}
if( true || false )
{
echo PHP_EOL . 'ok [||]';
}
echo PHP_EOL . PHP_EOL;
echo PHP_EOL . PHP_EOL;
echo '###########[inline alternative sintax]';
echo PHP_EOL . PHP_EOL;
echo '[||]' . true || false ? 'ok' : 'ng';
echo PHP_EOL;
echo '[||]' . ( true || false ? 'ok' : 'ng' );
echo PHP_EOL;
echo '[||]' . ( (true || false) ? 'ok' : 'ng' );
echo PHP_EOL . PHP_EOL;
echo '[or]' . true || false ? 'ok' : 'ng';
echo PHP_EOL;
echo '[or]' . ( true or false ? 'ok' : 'ng' );
echo PHP_EOL;
echo '[or]' . ( (true or false) ? 'ok' : 'ng' );
?>#14
E eu sei que o PDO é melhor porque, traduzindo o que diz o manual, encontrei:
"A extensão MySQL original é agora obsoleta, e irá gerar erros E_DEPRECATED ao conectar a um banco de dados. Em vez disso, use as extensões MySQLi ou pdo_mysql."
>
#14
E eu sei que o PDO é melhor porque, traduzindo o que diz o manual, encontrei:
"A extensão MySQL original é agora obsoleta, e irá gerar erros E_DEPRECATED ao conectar a um banco de dados. Em vez disso, use as extensões MySQLi ou pdo_mysql."
o exemplo do PDO e do mysql_query eu citei apenas para chegar a conclusão por que melhor? por que você ja usou e viu as vantagens e desvantagens dos 2, eu sei que o PDO e melhor que mysql_query.
questão de segurança , comunicação com vários bancos etc...
mais não queria desviar do assunto, foi apenas para, para saber o melhor e so usando e fazendo os testes como o
post #15 falou.
pode ter sido um exemplo ou analogia mas está errado:
... Na verdade, é que estão falando aí: "Se tem no manual, então tá bom!". Dá para obter o mesmo resultado, mas a sua explicação mostra o porquê de existirem as duas funções.
esse exemplo nem cabe aqui pois beira o absurdo. rsrsrs
Oxi, lendo os tópicos aí, já vi coisa pior!!!! kkkkkkkkkkkkkkkkkkkkkkkkk
A questão é bem simples: usar && e ||. Não há necessidade de and/or, só para o CodeIgniter, que ama inconsistências.
A questão é bem simples: usar && e ||. Não há necessidade de and/or, só para o CodeIgniter, que ama inconsistências.
Foi por essas e outras que fui para o Cakephp :yes:
:coolio:
Todas as funções estão corretas na primeira ele usa && para se não existir as duas variáveis ele execulta o if, na segunda se
$library for vazio ou $this->_base_classes[$library] tiver algum valor ele fará e assim sucessivamente não há erros nos operadores.