Domanda

In PHP hai la funzione create_function () che crea una funzione lambda denominata univoca come questa:

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

In realtà è meglio (oltre ad essere più facile) che semplicemente fare:

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

create_function è davvero migliore? (a parte il fatto che è più facile)

È stato utile?

Soluzione

In base alla mia comprensione dei documenti pertinenti, [1] entrambi fanno la stessa cosa, create_function () trova solo un nome di funzione univoco per te.

Per rispondere ad altri commenti su questa domanda:

  

create_function può essere assegnato a una variabile che rende la funzione accessibile ad altre parti del codice, mentre eval è utile solo per l'ambito dato.

Può darsi che eval () venga eseguito nell'ambito corrente, ma le definizioni delle funzioni vengono comunque scaricate nello spazio dei nomi globale. [2] Quindi, ogni volta che definisci una funzione, sarà accessibile ovunque nel tuo programma.

  

L'uso di eval () ingombrerà l'elenco delle funzioni globali, create_function () non

create_function () restituisce solo una stringa con il nome della nuova funzione, [3] non un tipo speciale di callback. Quindi, entrambe le tecniche inquineranno il tuo spazio dei nomi globale.

Quindi no, a parte create_function () essendo più semplice, non sembra essere migliore di eval ().

Note:

[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

Altri suggerimenti

L'uso di eval () ingombrerà l'elenco delle funzioni globali, create_function () non lo farà, a parte questo non ci sono grandi differenze. Tuttavia , entrambi i metodi richiedono di scrivere il corpo della funzione all'interno di una stringa PHP che è soggetta a errori e se steste lavorando al mio progetto, vorrei ordinarvi di dichiarare semplicemente una funzione di supporto usando la sintassi normale.

Le funzioni anonime in PHP sono implementate così male che il tuo codice è in realtà meglio non usarle. (Per fortuna questo sarà risolto in PHP 5.3).

Personalmente, ho scoperto che create_function () è estremamente utile durante l'ordinamento di array.

In effetti, ho appena cercato sul web e sembra che la documentazione di PHP ne sia un buon esempio.

http://us.php.net/create_function

Scorri verso il basso fino a Esempio n. 3 Uso di funzioni anonime come funzioni di richiamata .

create_function può essere assegnato a una variabile rendendo la funzione accessibile ad altre parti del codice, mentre eval è utile solo per l'ambito dato.

(a parte il fatto che è più facile)

Non capisco come puoi scartarlo così prontamente. Dati i tuoi due esempi, quale è più facile da capire a colpo d'occhio? Create_function ti dice cosa intendi realizzare. Eval no.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top