Welches Open-Source-PHP-Projekt hat das 'perfekte' OOP-Design, von dem ich lernen kann? [geschlossen]

9

Ich bin ein Neuling bei OOP und lerne am besten anhand eines Beispiels.

Man könnte sagen, diese Frage ähnelt der Frage, welche Scala-Open-Source-Projekte ich studieren soll, um die besten Codierungspraktiken zu erlernen - aber in PHP.

Ich habe gehört, dass Symfony die beste "Architektur" (ich werde nicht so tun, als wüsste ich, was das genau bedeutet) sowie Doctrine ORM hat. Lohnt es sich, viele Monate damit zu verbringen, den Quellcode dieser Projekte zu lesen, die verwendeten Muster abzuleiten und neue Tricks zu lernen?

Ich habe die gleiche Anzahl von Webseiten gesehen, die Zends Codebasis ablehnen und mögen (wird Links bereitstellen, wenn dies als notwendig erachtet wird).

Kennen Sie ein anderes Projekt, bei dem ein erfahrener OOP-Entwickler vor Freude Tränen vergießen würde?

Bitte lassen Sie mich hinzufügen, dass Praktikabilität und Anwendungsbereich hier überhaupt kein Problem darstellen - ich möchte nur Folgendes tun:

  • Wählen Sie ein Projekt aus, dessen Codebasis von Entwicklern als besser und besser als ich eingestuft wird.
  • Schreiben Sie Code, der die Leistung des Projekts erreicht.
  • Vergleichen Sie die Ergebnisse und versuchen Sie zu lernen, was ich nicht weiß.

Grundsätzlich eine akademische Interessenbasis. Irgendwelche Empfehlungen bitte?

Aditya MP
quelle
4
Ich bin kein Experte, aber ich denke nicht, dass OOP in PHP üblich ist oder unbedingt gefördert wird.
Asfallows
3
@asfallows In der Tat war dies der Fall - aber mit der Veröffentlichung von PHP 5.3 ändern sich die Dinge und es gibt eine definitive Tendenz, alle neuen Funktionen zu nutzen, die die Sprache für die OOP-Codierung bietet.
Aditya MP
3
Es gibt kein "perfektes OOP-Design".
Robert Harvey
1
Ich sehe, dass Sie bereits Mitglied bei Code Review Stack Exchange sind. Verwenden Sie es ausgiebig, es ist der wertvollste Stapelaustausch beim Lernen. Wir würden gerne den Code sehen und diskutieren, den Sie schreiben, während Sie etwas über OOP lernen ...
yannis
1
@Arkh Harsh. Versuchen wir, persönliche Angriffe zu unterlassen. Wenn Sie mit asfallows nicht einverstanden sind, nehmen Sie sich Zeit, um einen gut geschriebenen Kommentar zu schreiben.

Antworten:

2

Symfony 2 ist wahrscheinlich das beste große Projekt, von dem man lernen kann, aber es ist ziemlich groß.

Ich habe kürzlich ein hübsches und kleines Open-Source-PHP-Projekt namens Phrozn (statischer Site-Generator) gefunden. Die Codebasis ist relativ klein, sodass Sie sie ziemlich schnell überprüfen können.

AKTUALISIEREN:

Phrozn ist modern (verwendet PHP 5.3+ und verlässt sich stark darauf), es ist erweiterbar und verfügt über eine strikte Codeabdeckung. Außerdem wird Code aus anderen gut geschriebenen Projekten wie Symfony (YAML), Zend (Autoloader), PEAR und Twig wiederverwendet.

OOP, verwendet Namespaces und ist sehr gut dokumentiert. Ich sage nicht, dass es perfekt ist oder dass es mit einem Projekt wie Symfony verglichen werden kann, aber es ist einen Versuch wert.

Christian P.
quelle
1
Können Sie uns ein paar Details zur Codebasis von Phrozn geben? Was macht es ideal zum Lernen, abgesehen von seiner Größe?
Yannis
1
@YannisRizos :) Der Code ist bei github zu finden, sodass Sie einen kurzen Blick darauf werfen können. github.com/farazdagi/phrozn
Christian P
17

Ich persönlich würde sagen, schauen Sie sich Symfony2 an . Es ist so ziemlich das beste End-to-End-Großprojekt, das ich bisher gesehen habe. Das heißt nicht, dass es keine schlechten Teile gibt, aber insgesamt ist es ziemlich gut.

Jetzt ist Zend in der Mitte. Wenn Sie sich die öffentliche API ansehen, ist sie ziemlich gut. Es gibt einige WTF-Teile, aber zum größten Teil ist es in Ordnung. Wenn Sie sich mehr damit beschäftigen, werden Sie viel mehr WTF-Code finden ...

Was Sie unbedingt vermeiden sollten:

  • CodeIgniter - Fubar MVC-Modell
  • Kohana - Viele Statiken
  • Cake - PHP 4 Objektsemantik
  • Drupal - Überhaupt nicht OOP
  • Wordpress - Überhaupt nicht OOP

Was den Rest betrifft, werden Sie feststellen, dass es ein Hit und Miss ist. Alle Designs haben gute und schlechte Teile. Schauen Sie sich Lithium an , es hat einige wirklich coole Designkonzepte. Aber es gibt auch eine Menge Fubar-Umleitung und Hackery, um das zum Laufen zu bringen.

Und das soll man zur Bank bringen. Es gibt kein perfektes Design, versuchen Sie nicht, eines zu finden. Schauen Sie sich stattdessen viele von ihnen an und entscheiden Sie selbst. Versuchen Sie jeden, versuchen Sie, sie zu brechen. Versuchen Sie, sie nur durch Lesen zu verstehen (was ein guter Test für vernünftiges Design ist) ...

Nur meine persönliche Meinung ...

ircmaxell
quelle
2
+1 für symfony2, aber was noch wichtiger ist, die gesamte Community baut darauf auf. ZF2 ist wahrscheinlich auch erwähnenswert, obwohl sie die Dinge abstrakter zu halten scheinen.
Adrian Schneider
1
+1 auch für symfony2. Es hat eine wirklich solide Codebasis, es verwendet viele Best Practices aus anderen Sprachen und Frameworks, eine großartige Community, Kernentwickler sind hilfreiche, erreichbare Leute. Obwohl die Entwicklung mit der Umgestaltung der Dinge auf dem Weg zur Verbesserung fortgesetzt wird, ist der aktuelle Status für die Produktion bereit. Fabien Potencier, der Erfinder von Symfony, hat eine Reihe von Blog-Posts ( fabien.potencier.org ) zum Erstellen eines Frameworks mit Symfony-Komponenten veröffentlicht. Es sollte ein guter Ausgangspunkt sein, da er diese Beiträge geschrieben hat, um Menschen beim Lernen zu helfen.
Hakan Deryal
Das Lesen des Quellcodes von symfony2 ist eigentlich eine Inspiration, ohne zu komplex zu sein, um es zu verstehen. Es ist jedoch kein TDD entwickelt, was wahrscheinlich ein Eckpfeiler für das "perfekte" OOP "-Design" wäre - da kein Design perfekt ist, was bedeutet, dass Sie es ändern müssen und dafür die Tests benötigen.
hakre
2
Nun, Sie können Symfony, Zend oder Kohana nicht ernsthaft mit Wordpress und Drupal vergleichen.
Daniel Ribeiro
Vielen Dank! Ich habe Symfony heruntergeladen und werde es verstehen. Vielen Dank, dass Sie meine Befürchtungen bezüglich CodeIgniter bestätigt haben: Ich habe einmal im SilverStripe IRC gehört, dass "CodeIgniter ein Anfänger-OOP-Framework ist und viele Anfängerfehler macht" - und sie haben angefangen, in PHP4 zu schreiben, hatten aber nicht die Zeit, dies umfassend zu überarbeiten Ich bezweifle, dass sie alle großartigen Funktionen dieser Sprache genutzt haben. Bitte beachten Sie, dass ich CI NICHT ablehne! Ich liebe den Rahmen und der Himmel weiß, wie viele Projekte für mich einfacher geworden sind, weil ich ihn benutzt habe. Aber für einen Lernzweck ist es vielleicht nicht das Beste.
Aditya MP