DEV Community

slns
slns

Posted on

Php Closure

Closure em PHP

Uma closure em PHP é uma função anônima que pode capturar variáveis do seu escopo circundante. Isso permite que a função acesse essas variáveis mesmo depois que o escopo externo tenha terminado. As closures são úteis para criar funções dinâmicas e encapsular comportamentos.

Exemplo Básico

<?php
$mensagem = "Olá, mundo!";

$minhaClosure = function() use ($mensagem) {
    echo $mensagem;
};

$minhaClosure(); // Saída: Olá, mundo!
?>
Enter fullscreen mode Exit fullscreen mode

No exemplo acima:

  • A variável $mensagem é capturada pela closure através da cláusula use.
  • A closure é chamada mais tarde e ainda pode acessar $mensagem.

Usando Closure Dentro de uma Função

<?php
function criarSaudacao($nome) {
    $mensagem = "Olá, $nome!";

    // Definindo uma closure dentro da função
    $saudacao = function() use ($mensagem) {
        echo $mensagem;
    };

    // Retornando a closure
    return $saudacao;
}

$saudacaoParaJoao = criarSaudacao("João");
$saudacaoParaJoao(); // Saída: Olá, João!
?>
Enter fullscreen mode Exit fullscreen mode

Neste exemplo, a closure é criada dentro da função criarSaudacao e captura a variável $mensagem do seu escopo.

Passando Variáveis por Referência

Por padrão, as variáveis são passadas por valor para a closure. Para passá-las por referência, use o operador &:

<?php
$contador = 10;

$minhaClosure = function() use (&$contador) {
    $contador++;
};

$minhaClosure();
echo $contador; // Saída: 11
?>
Enter fullscreen mode Exit fullscreen mode

Aqui, a variável $contador é passada por referência, permitindo que a closure modifique seu valor original.

As closures em PHP são uma ferramenta poderosa para encapsular lógica e criar funções dinâmicas, mantendo o acesso a variáveis do escopo onde foram definidas.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →