Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wallace Maxters

Por que o Codeigniter usa esses operadores lógicos?

Recommended Posts

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 ||?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

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 TRUE

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara 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"; }
?>

http://php.net/manual/pt_BR/language.operators.comparison.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 || ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ||.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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".

Compartilhar este post


Link para o post
Compartilhar em outros sites

#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

 

http://bit.ly/1g7entH

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

http://bit.ly/1g7entH

obrigado por me corrigir, peguei o link errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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' );
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

#14

 

- O PDO é mais seguro do que o mysql_connect().

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 arroba está na documentação, mas não é aconselhável. Era isso que quis dizer, diferenciando "aconselhável" de "certo".

Compartilhar este post


Link para o post
Compartilhar em outros sites

#14

 

- O PDO é mais seguro do que o mysql_connect().

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 arroba está na documentação, mas não é aconselhável. Era isso que quis dizer, diferenciando "aconselhável" de "certo".

 

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.