2009-09-09 21 views

Respuesta

21

Creo que debería preocuparse más por la capacidad de mantenimiento y menos por el rendimiento, especialmente en ese tipo de situaciones, donde la diferencia de rendimiento probablemente no es tan grande entre las dos soluciones, mientras que la diferencia en la capacidad de mantenimiento parece importante.

como Donald Knuth dijo:

Debemos olvidarnos de pequeñas eficiencia, dicen que alrededor del 97% de las veces : la optimización prematura es la raíz de todo mal.

Esto es muy cierto, en esta situación ;-)

7

Eso es una mala práctica. No solo pueden suceder todas las cosas extrañas y perderás demasiado tiempo intentando depurarlas, sino que también el código se vuelve más confuso.

En términos de rendimiento, no estoy completamente seguro de ello. Todo lo que sé es que si defines una función dentro de otra, esa última función solo existirá si se llama a la externa. Eso puede aliviar algo de memoria. Pero creo que la recompensa no es significativa.

Una forma muy común es definir la función fuera de esa función y llamarla al interior.

6

Depende de la situación, ya que puede ser más deseable que el uso de create_function(). Sin embargo, debe saber que la función que se crea dentro de la función es de alcance global.

function creator() { 

    function inside() { 

     echo "hi."; 
    } 
} 

creator(); 
inside(); 

Esto imprimirá "hola". aunque la función inside() se creó "dentro" de la función del creador. Entonces, si tiene una función en un bucle que está creando una función, necesita verificar si la función existe, de lo contrario causará un error function exists después del primer bucle.

11

Existen múltiples razones en contra:

  • no será analizada la documentación de la función interna.
  • la función interna sólo existe después de la función externa ha sido llamado (pero incluso fuera del alcance de la función externa después)
  • Es difícil de leer (porque no se ve comúnmente)
  • La única ventaja I podría pensar es la definición de una devolución de llamada, pero esto es mejor hacerlo con create_function() (<PHP 5.3) o closures (>=PHP5.3)
  • Si usted está preocupado por el rendimiento en este nivel, que realmente debería utilizar otro idioma
+1

+ 1. Cubre el mismo territorio que todas las otras respuestas juntas, y lo hace de manera concisa. –

Cuestiones relacionadas