Fácil PHP
Saudação com closure e use
Enunciado
Crie uma closure que recebe um nome e imprime uma saudação usando uma variável externa $saudacao. A closure deve capturar $saudacao com use.
Requisitos
- A closure deve usar
use ($saudacao). - A saída deve ser exatamente
Bom dia, Ana!seguida de nova linha. - O código deve ser executável sem erros.
Código inicial
<?php
$saudacao = "Bom dia";
// Crie a closure e chame-a com "Ana"
Saída esperada
Bom dia, Ana!
Ver dica
A sintaxe é function($nome) use ($saudacao) { ... }.
Mostrar solução
<?php
$saudacao = "Bom dia";
$cumprimentar = function($nome) use ($saudacao) {
echo "$saudacao, $nome!\n";
};
$cumprimentar("Ana");
Passo a passo
- Definimos a variável
$saudacaocom o valor"Bom dia". - Criamos uma closure atribuída a
$cumprimentar. - A cláusula
use ($saudacao)importa a variável externa para dentro da closure. - Dentro da closure, usamos
$saudacaoe$nomepara montar a mensagem. - Chamamos a closure passando
"Ana", que imprimeBom dia, Ana!.
Por que funciona
Closures em PHP não capturam automaticamente variáveis do escopo externo; é preciso declarar use. Isso deixa explícito quais valores a função está usando, evitando efeitos colaterais indesejados. A variável capturada é uma cópia do valor no momento da definição.
Erros comuns
- Esquecer o
use:function($nome) { echo "$saudacao"; }gera aviso de variável indefinida e imprime vazio. - Usar
usecom variável inexistente:use ($outra)causa erro de variável não definida. - Tentar modificar
$saudacaodentro da closure sem&: a alteração não reflete fora, pois a captura é por valor.
Outra forma de resolver
Com arrow function, que captura automaticamente:
$cumprimentar = fn($nome) => print("$saudacao, $nome!\n");
$cumprimentar("Ana");
Arrow functions são mais concisas, mas não permitem múltiplas linhas ou captura por referência.
Saída esperada
Bom dia, Ana!