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

Compact()

1) Sobre o uso da função compact() não entendi muito bem. Como ela entendeu que tinha que pegar as variáveis $nome, $nota e $idade só passando a string do nome delas?

2)E pelo que entendi essas variáveis só passaram a existir depois que fiz a função extract. E se eu quisesse suar a compact() para gerar um novo array a partir de nomes de variáveis sem usar o extract()?

3) Como foi dito na aula confesso que não entendi a situação de usar o compact() para passar variáveis para o html. Tem um exemplo?

3 respostas
solução!

1- A função compact vai buscar se a string que você passou para ela como argumento é uma variável existente no seu código, se não for, o compact vai ignorar a string passada e utilizar somente as strings que correspondem a uma variável valida .

$nome = 'karolina';
$sobrenome = "gomes";

$dados = compact('nome', 'sobrenome', 'idade');

print_r($dados);

Resultado:
        Array
    (
        [nome] => karolina
        [sobrenome] => gomes
    )

Como a variável $idade não definida em nenhum lugar do código a função compact não vai adicionar ela no array .

2 - http://devblog.drall.com.br/como-obter-o-nome-de-uma-variavel-no-php

Nesse link ele mostra como pegar o nome da variável, acredito que conseguindo fazer isso você irá conseguir implementar um código que funcione sem usar o extract, não fiz aqui porque talvez ficaria um pouco grande ou não, mas se não conseguir pode falar que respondo com o código... obs: se tem uma função pronta, é recomendável usa-lá, como o professor fala no curso: se já existe, não devemos recriar a roda... Mas as vezes é bom fazer isso, mas só pra estudo mesmo.

3 - essa aqui acho melhor esperar o professor kkk, não tive nenhum caso de uso até agr com ela, por isso não sei mt bem como implementar , mas não deve ser mt complexo.

Opa, Karolina. A parte 1 o Lázaro já respondeu. Essa função usa a string que você passar por parâmetro para buscar uma variável com esse nome. Ela existindo, uma chave será gerada no array que vai ser retornado. :-D

Sobre a segunda pergunta: Não, não precisa usar sempre o extract. Você pode fazer o compact de quaisquer variáveis que já existam. O exemplo do Lázaro mostra isso. :-D

Sobre a terceira pergunta, no curso de MVC nós vamos usar essa função da seguinte forma:

public function handle(ServerRequestInterface $request): ResponseInterface
{
    $curso = $this->entityManager->find(Curso::class, $request->getQueryParams()['id']);

    $titulo = 'Editar Curso';
    $html = $this->getHtmlFromTemplate('cursos/formulario.php', compact('curso', 'titulo'));

    return new Response(200, [], $html);
}

Entendi. Obrigada, pessoal!!