Le langage PHP est connu pour être simple et facile à apprendre, mais certains débutants écrivent souvent du code PHP peu performant, ce qui peut sérieusement affecter l'efficacité de fonctionnement de l'ensemble du système. Dans cet article, nous avons rassemblé pour tout le monde quelques astuces de programmation PHP et techniques d'optimisation. Nous espérons que les débutants en PHP liront attentivement les conseils de rédaction suivants et développeront de bonnes habitudes de programmation PHP !

PHP 编程技巧与优化

63 astuces de programmation PHP

  • 1. Utilisez autant de fonctions intégrées de PHP que possible.
  • 2. Utilisezechoau lieu deprint, et utilisezechoplusieurs paramètres (note du traducteur : c'est-à-dire des virgules au lieu de points) au lieu d'une concaténation de chaînes, par exemple
  • echo $str1,$str2;
    
  • 3. Ne décomposez pas trop les méthodes ; réfléchissez attentivement au code que vous avez réellement l'intention de réutiliser.
  • 4. Pendant l'exécutionfor4. Avant d'exécuter
  • une boucle, déterminez le nombre maximal d'itérations ; ne calculez pas le maximum à chaque itération.
  • 5. Supprimez les variables inutilisées, en particulier les grands tableaux, pour libérer de la mémoire.
  • 7, $row['id']L'efficacité de$row[id]est 7 fois supérieure à celle de
  • 8. Utilisez des chemins complets lorsque vous incluez des fichiers ; la résolution des chemins du système d'exploitation prendra moins de temps.
  • 9. Si vous voulez savoir quand le script a commencé à s'exécuter (note du traducteur : c'est-à-dire quand le serveur reçoit la requête du client), utilisez$_SERVER['REQUEST_TIME']est meilleur quetime()。
  • 10. Les fonctions peuvent remplacer les expressions régulières pour accomplir la même fonctionnalité.str_replaceLa fonction est plus rapide quepreg_replacela fonction, maisstrtrl'efficacité de la fonction eststr_replacequatre fois celle de la fonction.
  • 11. Faites attention à l'indentation du code.
  • 12. Si une fonction de remplacement de chaîne peut accepter des tableaux ou des caractères comme paramètres, et que la longueur des paramètres n'est pas trop longue, envisagez d'écrire un segment de code de remplacement supplémentaire pour que chaque fois qu'un seul caractère soit passé comme paramètre, plutôt que d'écrire une seule ligne de code qui accepte un tableau comme paramètre de recherche et de remplacement.
  • 13. Utilisez une instruction switch (note du traducteur : c'est-à-dire,switch case) au lieu de plusieursif,else ifinstructions.
  • 14. Utiliser @ pour masquer les messages d'erreur est très inefficace.
  • 15. Activez le module mod_deflate d'Apache.
  • 16. Les connexions à la base de données doivent être fermées lorsqu'elles ne sont plus utilisées.
  • 18. Les messages d'erreur coûtent cher.
  • 19. Essayez d'éviter d'utiliser des fonctions dans les boucles for, par exemplefor ($x=0; $x < count($array); $x)count() est appelée à chaque itération.
  • 20. L'incrémentation d'une variable locale à l'intérieur d'une méthode est la plus rapide. C'est presque la même vitesse que l'appel d'une variable locale à l'intérieur d'une fonction.
  • 21. L'incrémentation d'une variable globale est 2 fois plus lente que l'incrémentation d'une variable locale.
  • 22. L'incrémentation d'une propriété d'objet (par ex.,$this->prop++) est 3 fois plus lente que l'incrémentation d'une variable locale.
  • 23. L'incrémentation d'une variable locale non définie est 9 à 10 fois plus lente que l'incrémentation d'une variable locale prédéfinie.
  • 24. Le simple fait de définir une variable locale sans l'appeler dans une fonction ralentira également la vitesse (à un degré équivalent à l'incrémentation d'une variable locale). PHP vérifie probablement si une variable globale existe.
  • 25. Les appels de méthode semblent sans rapport avec le nombre de méthodes définies dans la classe, car j'ai ajouté 10 méthodes (à la fois avant et après le test de la méthode), mais les performances n'ont pas changé.
  • 26. Les méthodes des classes dérivées s'exécutent plus rapidement que les mêmes méthodes définies dans la classe de base.
  • 27. L'appel d'une fonction vide avec un paramètre prend environ le même temps que l'exécution de 7 à 8 incrémentations de variable locale. Un appel de méthode similaire prend près de 15 incrémentations de variable locale.
  • 28. Utilisez des guillemets simples au lieu de guillemets doubles pour encadrer les chaînes de caractères ; c'est plus rapide. Parce que PHP recherche des variables dans les chaînes encadrées par des guillemets doubles, mais pas dans les guillemets simples. Bien sûr, vous ne pouvez le faire que lorsque vous n'avez pas besoin d'inclure des variables dans la chaîne.
  • 29. Lorsque vous utilisezechopour afficher plusieurs chaînes de caractères, utilisez des virgules au lieu de points pour séparer les chaînes ; c'est plus rapide.
  • 30. Apache met de 2 à 10 fois plus de temps à analyser un script PHP qu'à analyser une page HTML statique. Essayez d'utiliser davantage de pages HTML statiques et moins de scripts.
  • 31. À moins que les scripts puissent être mis en cache, ils seront recompilés à chaque fois qu'ils sont appelés. L'introduction d'un mécanisme de mise en cache PHP peut généralement améliorer les performances de 25 % à 100 %, en éliminant la surcharge de compilation.
  • 32. Faites autant de mise en cache que possible ; vous pouvez utiliser memcached. memcached est un système de mise en cache d'objets en mémoire distribué à hautes performances qui peut être utilisé pour accélérer les applications web dynamiques et réduire la charge de la base de données. La mise en cache des opcodes est très utile, afin que les scripts n'aient pas à être recompilés à chaque requête.
  • 33. Lorsque vous manipulez des chaînes de caractères et que vous devez vérifier si leur longueur répond à certaines exigences, vous utiliseriez naturellementstrlen()fonction. Cette fonction s'exécute assez rapidement parce qu'elle ne fait aucun calcul, elle retourne simplement la longueur connue de la chaîne stockée dans la structure zval (structure de données intégrée à C utilisée pour stocker les variables PHP). Cependant, parce questrlen()est une fonction, elle sera quelque peu lente, car un appel de fonction passe par de nombreuses étapes, telles que la mise en minuscules (note du traducteur : cela signifie que le nom de la fonction est mis en minuscules ; PHP ne distingue pas les noms de fonctions en majuscules et en minuscules), la recherche dans une table de hachage, et celles-ci s'exécutent avec la fonction appelée. Dans certains cas, vous pouvez utiliserisset()technique pour accélérer l'exécution de votre code.
  • if (strlen($foo) < 5) { echo "Foo is too short"; }
    if (!isset($foo{5})) { echo "Foo is too short"; }
    
  • 34. Si vous pouvez définir une méthode de classe commestatic, essayez de la définir commestatic, sa vitesse sera presque multipliée par 4.
  • 35. N'utilisez pasarray_key_exists, utilisezissetpour vérifier si une clé existe dans un tableau.
  • 36. Évitez d'utiliser__set,__getdes méthodes magiques telles que
  • 37. Utilisezinclude/requireau lieu deinclude_once/require_once, et essayez d'utiliser des chemins absolus.
  • 38. Ne mettez pascount/strlen/sizeofetc. dansforles instructions de condition de boucle.
  • 39. Essayez d'utiliserforeachau lieu defor/while
  • 40. Lorsqu'une chaîne de caractères contient des variables, utilisez des guillemets doubles au lieu de guillemets simples, par ex.
  • echo "hi, $name, nice to meet you";
    
  • 41. Utilisezfreadpour lire de petits fichiers, utilisezfile_get_contentspour lire des fichiers volumineux, et utilisezfseek
  • pour les fichiers très volumineux.ip2long()etlong2ip()42. Utilisez
  • fonction pour convertir une adresse IP en un entier en vue de son stockage. Cela simplifie le calcul pour déterminer si une adresse donnée se trouve dans une plage, et accélère aussi la recherche et le tri.checkdnsrr()43. Lors de la validation d'une adresse e-mail, utilisez
  • fonction pour vérifier si le domaine existe. Cette fonction intégrée peut confirmer que le domaine spécifié peut être résolu en une adresse IP.mysql_*44. Envisagez d'abandonnermysqli_*les fonctions de la série au profit des fonctions améliorées
  • fonctions de la série.
  • 45. Apprenez à aimer l'opérateur ternaire.
  • 46. Si vous estimez qu'il existe une partie réutilisable dans votre projet, vérifiez si PEAR la possède déjà avant d'écrire la prochaine ligne de code. Ce dépôt en ligne contient plus de 400 fragments de programme réutilisables qui peuvent être immédiatement utilisés dans votre programme. À moins que votre projet ne soit vraiment extraordinaire, vous pouvez toujours trouver un paquet PEAR pour vous aider à gagner du temps.highlight_file()47. Utilisez
  • pour imprimer automatiquement du code source formaté et magnifique.error_reporting(0)48. Utilisezphp.inifonction pour empêcher les utilisateurs de voir des informations d'erreur potentiellement sensibles. Idéalement, sur un serveur de production, cela devrait être complètement désactivé danserror_reporting(0)
  • . Mais si vous utilisez un serveur web partagé, vous n'avez pas votre propre fichier php.ini, donc dans ce cas votre meilleur choix est d'ajoutergzcompress()etgzuncompress()49. Avant de stocker de très grandes chaînes dans la base de données web, utilisez
  • pour compresser/décompresser explicitement les chaînes.
  • 50. Utilisez la méthode de passage de paramètres par « référence » pour obtenir plusieurs valeurs de retour d'une fonction.magic_quotes51. Comprenez bien les dangers des « magic quotes » et de l'injection SQL. La façon la plus simple d'empêcher l'injection SQL : dans php.ini, définissezmysql_real_escape_string()sur On, et utilisez
  • la fonction pour échapper.
  • 52. Les connexions à la base de données doivent être fermées lorsqu'elles ne sont plus utilisées ; n'utilisez pas de connexions persistantes.
  • 53. Pour les variables globales, appelez unset() sur elles dès que vous avez fini de les utiliser.htmlentities()ouhtmlspecialchars()54. Ne faites pas confiance aux données soumises par l'utilisateur ; utilisez toujours
  • pour l'échapper d'abord.$i55. Lorsque vous effectuez$i++une incrémentation ou une décrémentation sur une variable,++$iest plus lent que++$i. Cette différence est spécifique à PHP et ne s'applique pas aux autres langages, donc ne modifiez pas votre code C ou Java en espérant qu'il devienne immédiatement plus rapide ; ce ne sera pas le cas.$i++est plus rapide car il ne nécessite que 3 instructions (opcodes),
  • nécessite 4 instructions. La post-incrémentation crée en fait une variable temporaire, qui est ensuite incrémentée. La pré-incrémentation incrémente directement la valeur d'origine.
  • 56. Tout ne doit pas nécessairement être orienté objet (POO). La POO a souvent une surcharge élevée ; chaque appel de méthode et d'objet consomme beaucoup de mémoire.
  • 57. Si votre code contient de nombreuses fonctions chronophages, vous pouvez envisager de les implémenter sous forme d'extensions C.
  • 59. mod_zip peut être utilisé comme module Apache pour compresser vos données à la volée, et peut réduire le volume de transfert de données de 80%.
  • 60. Essayez de minimiser autant que possible les opérations sur les fichiers, bien que l'efficacité des opérations sur les fichiers de PHP ne soit pas mauvaise non plus.
  • 61. OptimisationSelect SQLPhrase, avancez le moins possible lorsque c'est possible.Insert、UpdateOpération
  • 62. Ne déclarez pas de variables à l'intérieur des boucles, en particulier les variables volumineuses : les objets (Cela ne semble pas être une préoccupation uniquement en PHP, n'est-ce pas ?)
  • 63. Essayez d'éviter l'affectation dans des boucles imbriquées pour les tableaux multidimensionnels.
  • 64、……

Ressources associées