Ir para conteúdo

POWERED BY:

Arquivado

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

Micilini Roll

Selecionar o objeto TRUE de uma forma inteligente?

Recommended Posts

Apesar do Titulo deste topico pareçer uma coisa complexa, na verdade é mais simples do que se pareçe..pois bem, observe um exemplo:

 

 

if(isset($_COOKIE['we_kilon'])){
echo $_COOKIE['we_kilon'];
}
if(isset($_SESSION['wx_olyng_kilon'])){
echo $_SESSION['wx_olyng_kilon'];
}

ou seja, eu faço um if verificando se cookie existe se nao existir ele ja parte pra verificar se a session existe! so que isso se torna um pouco cansativo e nao deixa um tom legal , dai eu pensei no seguinte:

 

if(isset($_COOKIE['olyng_kilon']) or isset($_SESSION['olyng_kilon'])){

echo this;

}

 

ou seja no caso só existe, ou uma session, ou um cookie na pagina (nao existe 1 session e 1 cookie simultaneos), um deles deverá retornar o valor de true no segundo if acima , certo? entao gostaria que o php pegasse qual retornou true e mostrasse na tela..Exemplo:

 

  • Se existir um cookie o php mostra o resultado desse cookie e como se fosse um echo $_COOKIE..,
  • e a mesma coisa serve pra session!, como se fosse um echo $_SESSION

Ali em cima eu coloquei echo this pois no javascript essa tecnica funciona muito bem!, alem do mas a tradução é mostre isso! ou seja mostre tudo aquilo que retornou true certo?!

 

Entendem? Essa tecnica é possivel?

Compartilhar este post


Link para o post
Compartilhar em outros sites

this, no PHP, também tem o $ na frente, assim como qualquer variável. PHP não é Javascript e echo this não vai funcionar. Lógica totalmente falha..

 

Isso está complexo sim e isso é desnecessário. Você não precisa e não deve verificar se existe o cookie que represente a sessão. Basta um isset($_SESSION['qualquer_chave']); e você já verifica.

 

Mas, novamente, está difícil de entender. Diga qual o RESULTADO que você espera ao invés de códigos mirabolantes que não funcionam em PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois bem vamos lá , dessa vez bem detalhadamente :pinch:

 

Vamos supor um projeto chamado home.php, para voce chegar neste projeto voce deverá primeiro passar pela index.php, dentro dela existe 2 botões:

 

  1. Criar uma session
  2. Criar um cookie

 

assim que um destes 2 é clicado automaticamente cria-se o que foi dito! ou seja:

 

 

Se voce clicou no botao escrito session cria-se uma session e logo apos voce é redirecionado para a pagina home.php

Se voce clicou no botao escrito cookie cria-se um cookie e logo apos voce é redirecionado para a pagina home.php

 

Ja na pagina home.php existe esse seguinte comando:

 

if(isset($_COOKIE['we_kilon'])){
echo "Voce chegou ate aqui atraves do botão cookie";
}
if(isset($_SESSION['wx_kilon'])){
echo "Voce chegou ate aqui atraves do botão session";
}

 

ou seja o que esse comando faz:

 

  • Verifica SE existe um cookie chamado we_kilon se existir ele mostra uma mensagem se nao nada aconteçe
  • Verifica SE existe uma session chamado wx_kilon se existir ele mostra uma mensagem se nao nada aconteçe

 

Essa tecnica funciona so que eu gostaria de aprimora-la :yes: Da seguinte forma:

 

  • Somente fazer 1 IF e dentro dele colocar pra verificar se existe cookie ou session
  • Se existir um deles o resultado sera um TRUE e um FALSE
  • Mostrar o conteudo que retornou TRUE

 

Exemplo:

 

  1. Vamos supor que eu cliquei no botao session

 

if(isset($_COOKIE['we_kilon']) or isset($_SESSION['wx_kilon'])){

}

apartir do momento eu estarei dentro do if pois o comando OR aceita caso uma das alternativas forem VERDADEIRAS. entao pode se dizer que retornou praticamente isso daqui:

 

if(FALSE or TRUE ){
echo "voce esta dentro do if";
}

 

so que no caso o comando:

 

$_SESSION['wx_kilon']

Retornou TRUE agora o proprio PHP deverá mostrar o conteudo do comando que retornou true :natalbiggrin: por isso eu tentei colocar um THIS ali entende? Exemplo Pratico:

 

  • Eu cliquei em cookies - na home.php ele sabe que eu selecionei botao cookies e ele me mostra o valor armazenado dentro deste cookie!
  • a mesma coisa vale para as sessions!

 

 

Bem isso é possivel, em 1 so if?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não e é melhor nem tentar, adicionar complexidade para ficar bonitinho é estupidez.

 

This não significa simplesmente "isso", ele tem um significado especial na questão de OOP no PHP: http://php.net/manual/en/language.oop5.basic.php

 

Ademais, não faz muito sentido você ter "criar session" e "criar cookie", o usuário não tem a obrigação de saber se ele vai logar por session ou cookie, péssima usabilidade neste caso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

if (isset($_COOKIE['cookie']) or isset($_SESSION['session'])) {
    // Um dos dois existe. Verificamos denovo se o cookie existe
    // Se não existir, imprimimos a session
    echo isset($_COOKIE['cookie']) ? $_COOKIE['cookie'] : $_SESSION['session'];
}

Você pode tentar criar um açúcar sintático pra "encurtar" as coisas:

function value_if_exists(&$checkIt) {
    return isset($checkIt) ? $checkIt : null;
}

if (($cookie = value_if_exists($_COOKIE['cookie'])) or ($session = value_if_exists($_SESSION['session']))) {
    echo $cookie ?: $session;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela ajuda de todos voces!

 

@enrico pereira obg por mandar as paginas e suas explicações mas a meta que eu estava querendo obter mesmo foi o que o @Evandro Oliveira postou! é exatamente aqui

 

 

Mas antes de marcar como resolvido tenho as seguintes perguntas! Alguem poderia me explicar o significado de:

 

 

? : null ?: value_if_exists

 

 

O que significada cada um deles poderiam me explicar detalhadamente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, do início:

 

 

 

function value_if_exists(&$checkIt)

 

Há uma definição de função, que recebe um parâmetro por referência. Um parâmetro por referência precisa ser uma variável, objeto, referência de função, etc. (explicação completa no manual). O importante saber que a referência é usada aqui porque a variável passada pode não existir.

 

 

 

    return isset($checkIt) ? $checkIt : null;

 

isset() é uma função que retorna true se a variável existe ou false caso não exista. O ?/: é o operador ternário, uma forma para fazer if's simples. Esse código nada mais é do que esse:

 

 

if (isset($checkIt)) {
    return $checkIt;
} else {
    return null;
}

 

 

if (($cookie = value_if_exists($_COOKIE['cookie'])) or ($session = value_if_exists($_SESSION['session'])))

 

Um if que ao mesmo tempo verifica se a chave do array existe e define o valor para as variáveis $cookie e $session, que terá o valor da chave se existir ou null caso contrário.

 

 

 

    echo $cookie ?: $session;

 

O shorthand ternário nada mais é do que uma versão simplificada do operator ternário para alguns casos, traduzindo para um if comum:

if ($cookie) {
    echo $cookie;
} else {
    echo $session;
}

Mas, como você pôde ver, é muita complicação para um if simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outro encadeamento legal que dá pra fazer é com [inline]and[/inline]/[inline]or[/inline]

$valor = '';
(isset($_COOKIE['cookie']) and $valor = $_COOKIE['cookie']) or
(isset($_SESSION['session']) and $valor = $_SESSION['session']);

A problemática dessa abordagem é que se o [inline]$_COOKIE['cookie'][/inline] existir, mas possuir um valor que avalie para falso, este será substituído por [inline]$_SESSION['session'][/inline] se esse existir.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é bom escrever de forma elegante pois demonstra que possui domínio sobre o que escreve, mas mantenha em mente o princípio kiss

Compartilhar este post


Link para o post
Compartilhar em outros sites

O princípio KISS ? (keep it simple, stupid!)

Evitar complicar algo por qualquer motivo que seja.

 

btw, não há uma regra geral.. mas há conceitos, princípios e padrões.

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.