Entfernen sich wiederholend, hart codiert Schleifen und Bedingungen in PHP

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

  •  03-07-2019
  •  | 
  •  

Frage

sah ich diese Frage zu C #, fragte ich hätte gerne eine Antwort für PHP mögen. Ich habe einigen alten Code, 4 Seiten von foreach Schleifen und Bedingungen hat, das macht es nur schwer zu lesen und zu befolgen. Wie würde ich diese mehr OO machen? Ich dachte SPL Funktionen verwenden, aber nicht vollständig verstehen, was ist noch beteiligt.

War es hilfreich?

Lösung

Dieser Code kann wahrscheinlich deutlich gereinigt werden, und schob weit in Richtung OO, ohne SPL zu berühren.

SPL wird nur dann benötigt, wenn Sie normale Objektverhalten in Sprachkonstrukten wie foreach () oder in builtins wie count (), oder in Array-Zugriff funcitons (beide Operator [] und Funktionen wie Taste (), neben ändern wollen ( ) usw.).

Cleanup Vorschläge:

  • Wenn die gleiche Aktion wird in dem Code mehr (mehr als 1 oder 2) mal durchgeführt wird, brechen sie in eine Funktion aus. Wenn diese Aktion auf alle Elemente in einem Array durchgeführt werden soll, sollten Sie mit array_walk . Wenn das Array zu Fuß aus irgendeinem Grunde nicht paßt, verwenden Sie eine Schleife:)
  • Wenn Sie mehrere Instanzen von einigen semantisch verbundenen Daten komplexer als ein Schlüssel: Wert-Paar, mit dem dazugehörigen Operationen, hält es in einer Klasse Verpackung. Aber ein formal dokumentiert Assoc. Array könnten Sie genauso gut passen. Hängt von Ihrem Stil, und von der Art der Daten. Wichtig dabei ist die Strukturierung von Methoden auf th Daten zu arbeiten, und die Dokumentation. Ist nicht wirklich wichtig, wenn Sie es sich um eine Klasse zu machen oder nicht.
  • Nachdem Sie die oben genannten Schritte getan haben, brechen die neu geschriebenen Funktionen und Objekte aus in separaten Dateien. Ich neige dazu, gegenüber den meist alles in einer Klasse Verpackung, so dass ich meistens eine Klasse pr habe. Datei. Aber einige Hilfsklassen teilen sich eine Datei mit der Hauptklasse, usw. Sie werden ein Gefühl dafür bekommen.

Andere Tipps

Wenn ich Sie wäre, ich durch das Schreiben Testcode beginnen würde.

Wenn Sie eine Reihe von Testfällen aufbauen können, die vollständig die Funktionalität beschreiben Sie Refactoring, können Sie voran gehen und schreiben Sie Ihren Code in dem sicheren Wissen, dass es immer noch funktionieren.

PHPUnit könnte ein guter Ort, damit zu beginnen.

Wenn ich Sie richtig verstehe, haben Sie foreach-Schleifen (und dergleichen) verschachtelt 4 Seiten tief, und Sie fragen sich, ob diese OO, was Sie gehört habe helfen können.

Sie sollten auf jeden Fall gehen Sie vor und Refactoring Code die Verschachtelungsebenen und verbessern die Lesbarkeit zu reduzieren, aber nicht zu verwechseln, dass mit Objektorientierung.

OO ist ein Weg, um Ihren Code zu strukturieren, die Definition der Datenstrukturen neben den Code zu setzen, die diese Datenstrukturen manipulieren. Während eines seiner wichtigsten Ziele ist die Lesbarkeit zu unterstützen, indem Verkapselungen der Komplexität bilden, OO ist nicht der einzige Weg, es zu tun.

Wenn Sie noch nicht die Konzepte der OO verstehen, Sie finden es einfacher, Ihren Code Refactoring den Code in den inneren Schleifen in separate Funktionen zu trennen, die (hoffentlich) jeweils eine einzige, einfache Aufgabe.

Verstehen Sie mich nicht falsch; Ich bin ein Verfechter von OO, vor allem als Technik-Entwicklern mit höherer Ebene Konzepten bieten Design effizienter zu diskutieren. OO lohnt zu lernen.

Aber nicht ein Mangel an Wissen über OO können Sie verhindern, ziehen den inneren Code aus den Schlaufen und in einzweckmaschinen Funktionen setzen.

(Wenn ich Ihr Niveau der OO Wissen falsch verstanden, ich entschuldige mich.)

langsam starten. Refactoring es ein Stück auf einmal.

Wenn Sie über eine Menge von Arrays Looping, Blick auf den Array-Funktionen wie array_map , array_walk und Freunde. Das ist mehr eine funktionelle Refactoring dann ein OO Refactoring, aber es würde man ziemlich weit. Wenn macht es Sinn, mehr OO zu gehen, dann werden Sie einige Funktionen, die Sie dann in die richtigen Klassen drücken könnten je nach Bedarf.

Einige gute Ratschläge von Johnathan und gnud. Seien Sie nicht so viel über die SPL Sorge, und erfahren Sie mehr über Refactoring , und schauen in das, was Refactoring-Tools sind für PHP zur Verfügung.

Auch ich kann nicht genug Lese empfehlen Effektives Arbeiten mit Legacy Code :

Und natürlich die kanonische Refactoring Buch :

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

PHP ist eine schwierige Sprache sauber von Code zu halten Gerüche, aber mit einer wenig Ausdauer kann es geschehen! Und Sie werden sich jeden Tag danken Sie in Ihrem Code-Basis suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top