Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida na Function logaUsuario (Aula 3)

Neste mesmo ponto eu fiquei com uma dúvida relacionada ao funcionamento interno da função. O professor fez o seguinte código:

function logaUsuario($email) {
    setcookie("usuario_logado", email, time() +60);
}

E no meu entendimento deveria ser assim:

function logaUsuario($email) {
    setcookie("usuario_logado", $email, time() +60);
}

As duas formas funcionaram. E eu fiquei sem entender! Como é que o parâmetro email dentro do setcookie vai saber que está se referindo ao $email que foi passado pela chamada da função? Ele não deveria ter o $ também?

3 respostas

Das duas formas o valor salvo no navegador é o email correto?

Este código não vai gerar um erro, e sim um NOTICE (ou WARNING), pois vai tentar encontrar uma constante chamada email, e não a encontrando, utiliza a string 'email'.

Verifique no seu navegador se o valor sendo salvo no cookie da primeira forma é apenas 'email'.

solução!

Realmente Marcelo, o Carlos está correto.

Uma pequena revisão sobre constantes:

<?php
define('EMAIL', 'teste@email.com.br');
echo EMAIL;

O código acima vai escrever "teste@email.com.br", dado que a constante EMAIL foi definida e depois impressa.

Imagine outro arquivo agora:

<?php
echo EMAIL;

A saída desse script é a seguinte:

PHP Notice:  Use of undefined constant EMAIL - assumed 'EMAIL' in Command line code on line 1
EMAIL

Então repare que o PHP cospe um erro dizendo que não achou a constante EMAIL (notice). Por ser um notice a execução do script não é interrompida. Repare também que o próprio erro que o PHP cospe diz o seguinte: Vou assumir que você quis imprimir uma string 'EMAIL' (repare nos apóstrofos).

Logo, seguindo o seu exemplo, o uso de $email colocaria o valor que está dentro da variável $email no cookie, enquanto que email somente (sem o dólar) cairia no problema que descrevi aqui (a única diferença é que meu exemplo foi em maiúsculo, porque constantes tem a convenção de serem escritas em maiúsculo - mas não é obrigatório). Portanto, sem o dólar o cookie será salvo, como o Carlos disse, com 'email' ao invés do email que está vindo dentro da função por meio da variável $email.

Muito obrigado pela atenção de ambos. Acredito que agora entendi. :)

E até o momento o curso não apresentou nada sobre constantes, então, não sabia como elas eram manipuladas.

Parabéns pela ótima explicação Vitor. Obrigado.