create_function do PHP () versus apenas usando eval ()
-
03-07-2019 - |
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)
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
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.