El lenguaje PHP es conocido por su facilidad de aprendizaje, pero algunos principiantes suelen escribir código PHP de bajo rendimiento, lo que afecta gravemente la eficiencia operativa de todo el sistema. En este artículo hemos recopilado algunos consejos y optimizaciones de programación en PHP. Esperamos que los principiantes de PHP lean atentamente los siguientes consejos y desarrollen buenos hábitos de programación en PHP.

63 consejos de programación en PHP
- 1. Utiliza en la medida de lo posible las funciones integradas de PHP.
- 2. Usa
echoen lugar deprint, y usaechosus múltiples parámetros (nota del traductor: se refiere a usar coma en lugar de punto) en lugar de la concatenación de cadenas, por ejemplo
echo $str1,$str2;
3. No subdividas demasiado los métodos; piensa detenidamente qué código realmente deseas reutilizar.4. Al ejecutarforel bucle, determina el número máximo de iteraciones; no calcules el máximo en cada iteración.5. Anula las variables que no se usan, especialmente los arrays grandes, para liberar memoria.6. No es necesario implementar todas las estructuras de datos con clases; los arrays también son muy útiles.
7, $row['id']la eficiencia de$row[id]es 7 veces la de.8. Usa rutas completas al incluir archivos; el tiempo necesario para resolver la ruta del sistema operativo será menor.9. Si quieres saber el momento en que el script comienza a ejecutarse (nota del traductor: es decir, cuando el servidor recibe la solicitud del cliente), usa$_SERVER['REQUEST_TIME']es mejor quetime()。10. Usa funciones en lugar de expresiones regulares para realizar la misma función,str_replaceuna función es más rápida quepreg_replaceotra función, perostrtrla eficiencia de una función esstr_replacecuatro veces la de otra función.11. Presta atención a la indentación del código.12. Si una función de reemplazo de cadenas acepta arrays o caracteres como parámetros, y la longitud de los parámetros no es demasiado grande, entonces puedes considerar escribir un código de reemplazo adicional, de modo que cada vez se pase un carácter como parámetro, en lugar de escribir una sola línea de código que acepte un array como parámetros de búsqueda y reemplazo.13. Usar la sentencia de selección por ramas (nota del traductor: es decir,switch case) es mejor que usar múltiplesif,else ifsentencias.14. Usar @ para suprimir mensajes de error es muy ineficiente.15. Activa el módulo mod_deflate de Apache.16. Las conexiones a la base de datos deben cerrarse cuando se terminen de usar.18. Los mensajes de error son costosos.19. Intenta no usar funciones dentro de los bucles for, por ejemplofor ($x=0; $x < count($array); $x)cada iteración llamará a la función count().20. Incrementar una variable local dentro de un método es lo más rápido. Casi equivalente a la velocidad de invocar una variable local en una función.21. Incrementar una variable global es 2 veces más lento que incrementar una variable local.22. Incrementar una propiedad de un objeto (por ejemplo:$this->prop++) es 3 veces más lento que incrementar una variable local.23. Incrementar una variable local no predefinida es de 9 a 10 veces más lento que incrementar una variable local predefinida.24. Definir una variable local sin llamarla en la función también ralentiza la velocidad (en un grado equivalente a incrementar una variable local); PHP probablemente comprobará si existe una variable global.25. La invocación de métodos parece no estar relacionada con la cantidad de métodos definidos en la clase, porque agregué 10 métodos (tanto antes como después del método de prueba) y no hubo cambios en el rendimiento.26. Los métodos en una clase derivada se ejecutan más rápido que los mismos métodos definidos en la clase base.27. Llamar a una función vacía con un parámetro cuesta el equivalente a realizar de 7 a 8 incrementos de variables locales. Una llamada a un método similar cuesta cerca de 15 incrementos de variables locales.28. Usa comillas simples en lugar de comillas dobles para encerrar cadenas; esto será un poco más rápido. Porque PHP busca variables en las cadenas rodeadas por comillas dobles, pero no en las comillas simples. Por supuesto, solo puedes hacerlo cuando no necesites incluir variables en la cadena.29. Usaechoal generar múltiples cadenas, usa comas en lugar de puntos para separar las cadenas; es más rápido.30. Apache tarda de 2 a 10 veces más en analizar un script PHP que en analizar una página HTML estática. Intenta usar más páginas HTML estáticas y menos scripts.31. A menos que el script se pueda almacenar en caché, se recompila cada vez que se llama. Introducir un mecanismo de caché de PHP generalmente puede mejorar el rendimiento entre un 25 % y un 100 %, evitando la sobrecarga de compilación.32. Haz todo lo posible por usar caché; puedes usar memcached. memcached es un sistema de caché de objetos en memoria de alto rendimiento que se puede usar para acelerar aplicaciones web dinámicas y reducir la carga de la base de datos. Es muy útil para el caché de código de operación (OP code), de modo que los scripts no tengan que recompilarse en cada solicitud.33. Cuando operas con cadenas y necesitas verificar si su longitud cumple cierto requisito, naturalmente usarásstrlen()la función. Esta función es bastante rápida porque no realiza ningún cálculo, solo devuelve la longitud de cadena conocida almacenada en la estructura zval (una estructura de datos incorporada de C, utilizada para almacenar variables de PHP). Sin embargo, dado questrlen()es una función, será un poco lenta, porque la llamada a la función pasa por muchos pasos, como la conversión a minúsculas (nota del traductor: se refiere a las minúsculas del nombre de la función; PHP no distingue entre mayúsculas y minúsculas en los nombres de las funciones), la búsqueda hash, y se ejecutará junto con la función llamada. En algunos casos, puedes usarisset()la técnica para acelerar la ejecución de tu código.
if (strlen($foo) < 5) { echo "Foo is too short"; }
if (!isset($foo{5})) { echo "Foo is too short"; }
34. Si puedes definir los métodos de una clase comostatic, defínelos comostatic, su velocidad aumentará casi 4 veces.35. No usesarray_key_exists, usaissetpara verificar si una clave existe en un array.36. Evita usar__set,__getmétodos mágicos y similares.37. Usainclude/requireen lugar deinclude_once/require_once, y trata de usar rutas absolutas.38. No pongascount/strlen/sizeofy similares enforla sentencia de condición del bucle.39. Trata de usarforeachen lugar defor/while40. Cuando la cadena contenga variables, usa comillas dobles en lugar de comillas simples, por ejemplo:
echo "hi, $name, nice to meet you";
41. Para leer archivos pequeños usafread, para leer archivos grandes usafile_get_contents, para archivos extremadamente grandes usafseek42. Usaip2long()ylong2ip()la función para convertir direcciones IP en enteros para almacenarlas; esto facilita calcular si una dirección determinada está dentro de un segmento, y también acelera la búsqueda y la ordenación.43. Al validar direcciones de correo electrónico, usacheckdnsrr()la función para verificar si el dominio existe; esta función integrada puede confirmar si el dominio especificado se puede resolver a una dirección IP.44. Considera abandonarmysql_*las funciones de la serie y usar la versión mejorada demysqli_*la serie de funciones.45. Aprende a amar el operador ternario.46. Si en tu proyecto sientes que hay partes reutilizables, antes de escribir la siguiente línea de código mira si ya existen en PEAR. Esta biblioteca de recursos en línea contiene más de 400 fragmentos de programa reutilizables que se pueden usar inmediatamente en tu programa. A menos que tu proyecto sea realmente muy especial, siempre encontrarás un paquete PEAR que te ayude a ahorrar tiempo.47. Usahighlight_file()para imprimir automáticamente código fuente formateado de forma muy bonita.48. Usaerror_reporting(0)la función para evitar que los usuarios vean mensajes de error potencialmente sensibles. En un caso ideal, el servidor de producción debería tenerlophp.inicompletamente deshabilitado. Pero si usas un servidor web compartido, no tienes tu propio archivo php.ini; en ese caso, tu mejor opción es añadir al principio de la primera línea de todos los scriptserror_reporting(0)
49. Antes de almacenar cadenas muy grandes en la base de datos, usagzcompress()ygzuncompress()para comprimir/descomprimir explícitamente las cadenas.50. Obtén múltiples valores de retorno de una función mediante el método de pasar parámetros por 'referencia'.51. Comprende completamente el peligro de las 'comillas mágicas' y de la inyección SQL. El método más simple para prevenir la inyección SQL: en php.ini, establecemagic_quotesen On, y usamysql_real_escape_string()la función para escapar.52. Las conexiones a la base de datos deben cerrarse cuando se terminen de usar; no uses conexiones persistentes.53. Con las variables globales, debes hacer unset() en cuanto termines de usarlas.
54. No confíes en los datos enviados por el usuario; asegúrate de usarhtmlentities()ohtmlspecialchars()primero para escapar.
55. Al ejecutar el$iincremento o decremento de una variable,$i++será++$iun poco más lento.++$iEs más rápido porque solo necesita 3 instrucciones (opcodes),$i++en cambio necesita 4 instrucciones. El incremento posterior en realidad produce una variable temporal, que luego se incrementa. Mientras que el incremento previo se incrementa directamente sobre el valor original.56. No todo debe ser orientado a objetos (OOP); la orientación a objetos suele tener una gran sobrecarga; cada llamada a un método y a un objeto consume mucha memoria.57. Si en el código existen muchas funciones que consumen tiempo, puedes considerar implementarlas como extensiones en C.58. Evalúa (perfila) tu código. El perfilador te dirá qué partes del código consumen cuánto tiempo. El depurador Xdebug incluye un programa de perfilado; la evaluación de perfiles en general puede mostrar los cuellos de botella del código.59. mod_zip puede usarse como módulo de Apache para comprimir tus datos al instante, y puede reducir la cantidad de transferencia de datos en un 80%60. Intenta realizar menos operaciones de archivo, aunque la eficiencia de las operaciones de archivo de PHP tampoco es baja61. OptimizaSelect SQLlas sentencias, y en la medida de lo posible, realiza la menor cantidad deInsert、Updateoperaciones62. No declares variables dentro de bucles, especialmente variables grandes: objetos (¿esto no parece ser solo un problema a tener en cuenta en PHP, verdad?)63. Para matrices multidimensionales, intenta no asignar valores en bucles anidados
64、……
Recursos relacionados