Pergunta

Em PHP você tem a função create_function () que cria uma função lambda chamado única como esta:

$myFunction = create_function('$foo', 'return $foo;');
$myFunction('bar'); //Returns bar

É este realmente melhor (além de ser mais fácil), então basta fazer:

do{
 $myFunction = 'createdFunction_'.rand();
}
while(function_exists($myFunction));
eval("function $myFunction(\$foo) { return \$foo; }");
$myFunction('bar'); //Returns bar

É create_function realmente melhor? (Além do fato de que é mais fácil)

Foi útil?

Solução

No meu entendimento dos documentos relevantes, [1] que ambos fazem a mesma coisa, create_function () apenas surge com um nome de função único para você.

Para fazer face a alguns outros comentários sobre esta pergunta:

create_function pode ser atribuído a uma variável que faz a função acessível para outras partes do seu código, enquanto eval só é útil para o escopo fornecido.

Pode muito bem ser que eval () é executado no escopo atual, mas definições de funções levar um fora no espaço global de qualquer maneira. [2] Assim, sempre que você definir uma função, será acessível em qualquer outro lugar no seu programa.

Usando eval () irá sobrecarregar a lista de funções global, create_function () não irá

create_function () retorna apenas uma string com o nome da nova função, [3] não algum tipo de retorno de chamada especial. Assim, ambas as técnicas vai poluir o namespace global.

Então, não, para além de create_function (sendo mais fácil), não parece ser melhor do que eval ().

Notas de rodapé:

[1] http://au2.php.net/manual /en/functions.user-defined.php ; http://au.php.net/create_function ; http://au.php.net/eval

[2] http://au2.php.net/manual /en/functions.user-defined.php

[3] http://au.php.net/create_function

Outras dicas

Usando eval () irá sobrecarregar a lista de funções global, create_function () não irá, para além de que não há grande diferença. No entanto , ambos os métodos requerem escrever o corpo da função dentro de uma string PHP que é propenso a erros e se você estava trabalhando no meu projeto eu ordeno que você simplesmente declarar uma função auxiliar usando a sintaxe normal.

Funções anônimas em PHP são tão mal implementado que o código é realmente melhor fora de não usá-los. (Felizmente esta será fixa em PHP 5.3).

Pessoalmente, eu descobri que create_function () é extremamente útil para ordenar arrays.

Na verdade, eu só procurei na web, e parece que a documentação do PHP tem um bom exemplo disso.

http://us.php.net/create_function

Vá até Exemplo # 3 Usando funções anônimas como funções de retorno de chamada .

create_function pode ser atribuído a uma variável que faz a função acessível para outras partes do seu código, enquanto eval só é útil para o escopo fornecido.

(além do fato de que é mais fácil)

Eu não entendo como você pode descartar essa tão prontamente. Dado seus dois exemplos, o que é mais fácil de entender à primeira vista? Create_function lhe diz o que você pretende realizar. Eval não.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top