Criando e invocando uma function anônima em uma única instrução

Um fechamento de php ou uma function anônima são usados ​​para criar a function sem especificar seu nome.

É possível chamá-los sem atribuir ao identificador como fazemos em JavaScript? por exemplo

(function(){ echo('anonymous function'); })(); 

Qual é o uso correto da construção de use ao definir a function anônima e qual é o status da function anônima no método público com acessibilidade às propriedades particulares?

 $anon_func = function($my_param) use($this->object_property){ //use of $this is erroneous here echo('anonymous function'); }; 

É possível chamá-los sem atribuir ao identificador como fazemos em JavaScript? por exemplo

Não está no PHP 5.x; a menos que você conta quando seu método faz uma chamada de retorno como um argumento. por exemplo:

 $square = array_map(function ($v) { return $v*$v; }, $array); 

Qual é o uso correto da construção de uso ao definir a function anônima

A palavra-chave de use indica quais variables ​​do atual escopo lexical devem ser importadas para o fechamento. Você pode mesmo passá-los por referência e alterar a variável que está sendo passada, por exemplo:

 $total = 0; array_walk($array, function ($v) use (&$total) { $total += $v; }); // $total is now the sum of elements in $array 

Qual é o status da function anônima em método público com acessibilidade a propriedades privadas?

Os fechamentos definidos dentro de uma class têm access total a todas as suas propriedades e methods, incluindo os privados, sem necessidade de importar $this meio do use palavras-chave no PHP 5.4 :

 // this works fine in PHP 5.4 $anon_func = function($my_param) { $thing = $my_param + $this->object_property; echo('anonymous function'); }; 

Note-se que, por algum motivo estranho, o suporte para $this em closures foi removido no PHP 5.3 . Nesta versão, você pode contornar essa restrição usando algo como:

 // a workaround for PHP 5.3 $temp = $this; $anon_func = function($my_param) use ($temp) { $thing = $my_param + $temp->object_property; echo('anonymous function'); }; 

Mas isso dá access a membros públicos apenas, tentar acessar membros privados ainda lhe dará um erro.

Observe também que a tentativa de importar $this (via use ), independentemente da versão do PHP, resultará em um erro fatal. Cannot use $this as lexical variable .

 call_user_func(function() use(closure-vars){ ... }); 

O PHP 7 adicionou a capacidade de fazer isso.

Este código:

 (function() { echo "This works as expected in PHP 7.\n"; })(); 

funciona como seria de esperar no PHP 7. (Ainda não funciona em qualquer versão do PHP 5.x.)

Não se parece com isso, pois eles ainda precisam ser declarados com a notação de function() {} , e na minha instalação 5.3.2, tentar a sua idéia de amostra retorna um erro de syntax unexpected '(' . Não mencione isso também.

Talvez seja possível, uma vez que eles corrigem o analisador para permitir uma nova somefunction()[2] .