En JavaScript, puede usar Lazy Function Definitions para optimizar la segunda y la enésima llamada a una función realizando operaciones costosas de un solo uso solo en la primera llamada a la función.Definición de función diferida en PHP: ¿es posible?
Me gustaría hacer el mismo tipo de cosas en PHP 5, pero la redefinición de una función no está permitida, ni está sobrecargando una función.
Efectivamente, lo que me gustaría hacer es como lo siguiente, solo optimizado, por lo que las llamadas 2ª - Nth (por ejemplo, 25-100) no necesitan volver a verificar si son la primera llamada.
$called = false;
function foo($param_1){
global $called;
if($called == false){
doExpensiveStuff($param_1);
$called = true;
}
echo '<b>'.$param_1.'</b>';
}
PS he pensado en utilizar un include_once() o require() como la primera línea en la función para ejecutar el código externo sólo una vez, pero he oído que estos también son caros.
alguna idea? o hay una mejor manera de abordar esto?
El código se memoizing. la prueba bool (aunque probablemente sea más fácil escribir como si (! $ llamado)) decide si se ejecuta o no el código lento, por lo que solo se ejecuta una vez. –
@Kent: lee el enlace de scunliffe. Está tratando de redefinir la función después de la primera vez que se ejecuta para que pueda omitir la prueba 'if ($ called)'. –