Który projekt PHP typu open source ma „idealny” projekt OOP, z którego mogę się uczyć? [Zamknięte]


9

Jestem nowicjuszem w OOP i uczę się najlepiej na przykładzie.

Można powiedzieć, że to pytanie jest podobne do tego, które projekty Open Source Scala powinny się uczyć, aby nauczyć się najlepszych praktyk kodowania - ale w PHP.

Słyszałem, że Symfony ma najlepszą „architekturę” (nie będę udawać, że wiem, co to dokładnie znaczy), a także Doctrine ORM. Czy warto spędzać wiele miesięcy czytając kod źródłowy tych projektów, próbując wydedukować zastosowane wzorce i uczyć się nowych sztuczek?

Widziałem tyle samo stron internetowych, które nie zgadzają się z bazą kodową Zend (podam linki, jeśli uzna to za konieczne).

Czy znasz jakiś inny projekt, który sprawiłby, że każdy doświadczony programista OOP wylewał łzy radości?

Pozwólcie, że dodam, że praktyczność i zakres zastosowania nie jest tu wcale problemem - chcę tylko:

  • Wybierz projekt, w którym baza kodów została uznana przez deweloperów za znacznie lepszą i lepszą niż ja.
  • Napisz kod, który osiągnie to, co robi projekt.
  • Porównaj wyniki i spróbuj dowiedzieć się, czego nie wiem.

Zasadniczo baza kodów zainteresowań naukowych. Jakieś rekomendacje proszę?


4
Nie jestem ekspertem, ale nie sądzę, że OOP jest powszechne lub koniecznie wspierane w PHP.
lotem lotniczym

3
@asfallows Rzeczywiście tak było - ale wraz z wydaniem PHP 5.3 wszystko się zmienia i istnieje ostateczne nachylenie w kierunku korzystania z wszystkich nowych klapsów, które język zapewnia w kodowaniu OOP.
Aditya, poseł

3
Nie ma czegoś takiego jak „idealny projekt OOP”.
Robert Harvey

1
Widzę, że jesteś już członkiem Code Review Stack Exchange. Użyj go intensywnie, to najcenniejsza Exchange stosu podczas nauki, chcielibyśmy zobaczyć i omówić kod będziesz pisanie podczas nauki o OOP ...
Yannis

1
@Arkh Harsh. Spróbujmy powstrzymać się od osobistych ataków. Jeśli nie zgadzasz się z awariami, poświęć trochę czasu na napisanie dobrze napisanego komentarza.

Odpowiedzi:


2

Symfony 2 to prawdopodobnie najlepszy duży projekt do nauki, ale jest dość duży.

Niedawno znalazłem schludny i niewielki projekt PHP o otwartym kodzie źródłowym o nazwie Phrozn (generator strony statycznej). Baza kodu jest stosunkowo niewielka, więc można ją dość szybko sprawdzić.

AKTUALIZACJA:

Phrozn jest nowoczesny (wykorzystuje PHP 5.3+ i na nim w dużym stopniu polega), jest rozszerzalny, ma ścisłe pokrycie kodu. Ponownie wykorzystuje również kod z innych dobrze napisanych projektów, takich jak Symfony (YAML), Zend (Autoloader), PEAR i Twig.

OOP, używa przestrzeni nazw i jest bardzo dobrze udokumentowana. Nie twierdzę, że jest idealny, ani że można go porównać do projektu takiego jak Symfony, ale warto spróbować.


1
Czy możesz podać nam kilka dodatkowych informacji na temat bazy kodów Phrozn? Co czyni go idealnym do nauki, innym niż jego rozmiar?
yannis

1
@YannisRizos :) Kod można znaleźć na github, więc możesz rzucić okiem. github.com/farazdagi/phrozn
Christian P

17

Osobiście powiedziałbym, że sprawdź Symfony2 . To prawie najlepszy, duży projekt, jaki widziałem do tej pory. Nie oznacza to, że nie ma w tym złych elementów, ale ogólnie jest całkiem niezły.

Teraz Zend jest w środku. Jeśli spojrzysz na publiczny interfejs API, jest całkiem niezły. Jest w nim kilka części WTF, ale w większości jest w porządku. Jeśli zaczniesz w to więcej zagłębiać, znajdziesz DUŻO więcej kodów WTF ...

Jeśli chodzi o to, czego wprost unikać:

  • CodeIgniter - model Fubar MVC
  • Kohana - Dużo statyki
  • Cake - semantyka obiektów PHP 4
  • Drupal - wcale nie OOP
  • Wordpress - wcale nie OOP

Jeśli chodzi o resztę, przekonasz się, że jest trafiony. Wszystkie projekty mają dobre i złe strony. Spójrz na lit , ma kilka naprawdę fajnych koncepcji projektowych. Ale ma również wiele przekierowań Fubar i hackery, aby to zadziałało.

I to właśnie zabrać do banku. Nie ma idealnego projektu, nie próbuj go znaleźć. Zamiast tego spójrz na wiele z nich i sam zdecyduj. Spróbuj każdego, spróbuj je złamać. Spróbuj je zrozumieć, czytając je (co jest dobrym sprawdzianem rozsądnego projektu) ...

Tylko moja osobista opinia ...


2
+1 za symfony2, ale co ważniejsze, cała społeczność wokół niego buduje. Warto też wspomnieć o ZF2, choć wydaje się, że utrzymują one bardziej abstrakcyjny charakter.
Adrian Schneider

1
+1 również dla symfony2. Ma naprawdę solidną bazę kodu, wykorzystuje wiele dobrych praktyk z innych języków i struktur, wspaniałą społeczność, główni programiści są pomocnymi, dostępnymi ludźmi. Chociaż trwają prace nad refaktoryzacją rzeczy, aby je poprawić, obecny status jest gotowy do produkcji. Fabien Potencier, twórca Symfony, ma serię postów na blogu ( fabien.potencier.org ) na temat tworzenia frameworka z komponentami Symfony. To powinien być dobry punkt wyjścia, ponieważ napisał te posty, aby pomóc ludziom w nauce.
Hakan Deryal

Czytanie kodu źródłowego symfony2 jest tak naprawdę inspiracją, ale nie jest zbyt skomplikowane, aby zrozumieć, co jest dobre. Jednak nie został opracowany TDD, który prawdopodobnie byłby jednym z fundamentów „idealnego” projektu „OOP” - ponieważ żaden projekt nie jest idealny, co oznacza, że ​​trzeba go zmienić i do tego potrzebne są testy.
hakre

2
Cóż , poważnie nie można porównywać Symfony, Zend lub Kohany z Wordpress i Drupal.
Daniel Ribeiro,

Dziękuję Ci! Pobrałem Symfony, zacznę go rozumieć. Dziękuję za potwierdzenie moich obaw związanych z CodeIgniter: Kiedyś na SilverStripe IRC usłyszałem, że „CodeIgniter jest początkującym OOP Framework i popełnia wiele błędów dla początkujących” - i zaczęli pisać w PHP4, ale nie mieli czasu na dokładne refaktoryzowanie, więc Wątpię, aby wykorzystali wszystkie wspaniałe funkcje oferowane przez ten język. Pamiętaj, że NIE jestem w pogardzie dla CI! Uwielbiam ramy, a niebo wie, jak wiele projektów stało się dla mnie łatwiejszych, ponieważ z nich skorzystałem. Ale dla celów edukacyjnych może nie być najlepszy.
Aditya, poseł
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.