Me gustaría saber si es bueno definir una función dentro de otra función en PHP. ¿No es mejor definirlo antes de la función (y no dentro) en términos de rendimiento?PHP - Función dentro de una función. ¿Bueno o malo?
Respuesta
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 ;-)
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.
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.
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. PHP Typecasting - ¿Bueno o malo?
- 2. Tipos de PHP antes de los argumentos de la función, ¿bueno o malo?
- 3. ¿Está utilizando superglobals directamente bueno o malo en PHP?
- 4. C# String.IsNullOrEmpty: ¿bueno o malo?
- 5. Objetos desnudos. Bueno o malo
- 6. O/R Mappers - Bueno o malo
- 7. Un modelo base en PHP MVC, ¿bueno o malo?
- 8. php: Almacenar imagen en blob Mysql, ¿Bueno o malo?
- 9. PHP - Convertir todos los errores en excepciones - ¿Bueno o malo?
- 10. Clases de utilidades .. ¿Bueno o malo?
- 11. Función dentro de una función.?
- 12. ¿Declarar una función dentro de una función?
- 13. Expresión regular Grupos nombrados: ¿Bueno o malo?
- 14. ASP MVC HTML Helpers - ¿Bueno o malo?
- 15. ¿Usar demasiada estática es malo o bueno?
- 16. ¿ToString() es bueno, malo o simplemente redundante?
- 17. Sobrecarga del método: ¿diseño bueno o malo?
- 18. Cursores en MySQL - Bueno o malo
- 19. Acceder a una función dentro de una función (función anidada?)
- 20. Una función dentro de una estructura if
- 21. Función dentro de una función TSQL
- 22. Función dentro de una función en Java
- 23. jquery función dentro de una función
- 24. ¿Es posible reemplazar una función dentro de una clase PHP?
- 25. Cambiar una variable global desde dentro de una función PHP
- 26. Alcance de la función declarada dentro de una función
- 27. Rompiendo una función madre dentro de una función niño (PHP Preferiblemente)
- 28. Estrategia de grupo de conexión: bueno, malo o feo?
- 29. ¿Apagar el modo de compatibilidad IE8, bueno o malo?
- 30. Usar cadenas en lugar de símbolos: ¿bueno o malo?
+ 1. Cubre el mismo territorio que todas las otras respuestas juntas, y lo hace de manera concisa. –