Supprimer les boucles et les conditions répétitives et codées en dur en PHP

StackOverflow https://stackoverflow.com/questions/210475

  •  03-07-2019
  •  | 
  •  

Question

J'ai vu cette question posée à propos de C #. J'aimerais une réponse pour PHP. J'ai un vieux code qui comporte 4 pages de boucles foreach et de conditions qui le rend difficile à lire et à suivre. Comment pourrais-je faire cela plus OO? Je pensais utiliser les fonctions SPL mais je ne comprenais pas encore ce qui était impliqué.

Était-ce utile?

La solution

Ce code peut probablement être nettoyé de manière significative et poussé loin dans la direction de OO, sans toucher à SPL.

SPL n’est nécessaire que si vous souhaitez modifier le comportement normal d’un objet dans des constructions de langage telles que foreach (), ou dans des fonctions intégrées telles que count (), ou dans des fonctions d’accès à un tableau (les opérateurs [] et des fonctions telles que key (), next ( ) etc.).

Suggestions de nettoyage:

  • Si la même action est effectuée plusieurs fois (plus de 1 ou 2) dans le code, décomposez-la en une fonction. Si cette action doit être effectuée sur tous les éléments d'un tableau, envisagez d'utiliser array_walk . Si, pour une raison quelconque, parcourir le tableau ne convient pas, utilisez une boucle:)
  • Si vous avez plusieurs instances de données sémantiquement connectées plus complexes qu'une paire clé: valeur, avec les opérations associées, envisagez de les envelopper dans une classe. Mais une assoc officiellement documentée. array pourrait vous convenir aussi bien. Cela dépend de votre style et du type de données. L’important ici est la structuration des méthodes de travail sur les données et la documentation. Peu importe que vous en fassiez une classe ou non.
  • Après avoir suivi les étapes ci-dessus, divisez les fonctions et les objets nouvellement écrits en fichiers inclus séparés. J'ai tendance à emballer presque tout dans une classe, donc j'ai surtout un cours par classe. fichier. Mais certaines classes auxiliaires partagent un fichier avec la classe principale, etc. Vous en aurez une idée.

Autres conseils

Si j'étais vous, je commencerais par écrire le code de test.

Si vous pouvez créer un ensemble de cas de test décrivant de manière exhaustive les fonctionnalités que vous refactorisez, vous pouvez réécrire votre code en toute sécurité, sachant qu'il fonctionnera toujours.

PHPUnit pourrait être un bon point de départ pour commencer.

Si je vous ai bien compris, vous avez des boucles foreach (et similaires) imbriquées sur une profondeur de 4 pages et vous vous demandez si cette solution OO dont vous avez entendu parler peut vous aider.

Vous devriez certainement procéder à une refactorisation de votre code afin de réduire les niveaux d'imbrication et d'améliorer la lisibilité, mais ne confondez pas cela avec l'orientation des objets.

OO est un moyen de structurer votre code pour placer la définition des structures de données à côté du code manipulant ces structures de données. Si l’un de ses objectifs principaux est d’aider à la lisibilité en proposant des encapsulations complexes, l’OO n’est pas le seul moyen de le faire.

Si vous ne comprenez pas encore les concepts de OO, il vous sera peut-être plus facile de refactoriser votre code pour séparer le code à l'intérieur des boucles internes en fonctions distinctes qui (espérons-le) auront chacune une tâche simple et simple.

Ne vous méprenez pas; Je suis un partisan de OO, en particulier en tant que technique permettant de fournir aux développeurs des concepts de niveau supérieur permettant de discuter plus efficacement de la conception. OO vaut bien l'apprentissage.

Mais ne laissez pas un manque de connaissances sur OO vous empêcher de tirer le code interne des boucles et de les mettre dans des fonctions uniques.

(Toutes mes excuses, si j'ai mal compris votre niveau de connaissance de OO.)

Commencez lentement. refactoriser un morceau à la fois.

Si vous parcourez de nombreux tableaux, examinez les fonctions de tableau telles que array_map , array_walk , et copains. C’est plus un refactoring fonctionnel qu’un refactoring OO, mais cela vous mènerait bien loin. Si il était logique de recourir davantage à OO, vous disposerez alors de certaines fonctions que vous pourrez ensuite insérer dans les classes appropriées en fonction de vos besoins.

Quelques bons conseils de Johnathan et de gnud. Ne vous inquiétez pas du SPL et en savoir plus sur le refactoring , et cherchez quels outils de refactoring sont disponibles pour PHP .

De plus, je ne saurais trop vous recommander de lire Travailler efficacement avec du code hérité :

 alt text

Et bien sûr, le canonique Livre de refactoring :

texte alt http://ecx.images-amazon.com/images/I/519XT0DER6L._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopDroit,24,-23_SH20_OU01_OU01_.jpg

PHP est un langage difficile à garder des odeurs de code, mais avec un peu de persévérance, cela peut être fait! Et vous vous remercierez chaque jour pour regarder votre base de code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top