Какой проект PHP с открытым исходным кодом имеет «идеальный» дизайн ООП, из которого я могу поучиться? [закрыто]


9

Я новичок в ООП, и я учусь лучше всего на примере.

Вы могли бы сказать, что этот вопрос похож на то, какие проекты с открытым исходным кодом Scala я должен изучить, чтобы изучить лучшие практики кодирования - но на PHP.

Я слышал, скажу, что Symfony имеет лучшую «архитектуру» (я не буду притворяться, что я знаю, что именно это означает), а также Doctrine ORM. Стоит ли тратить много месяцев на чтение исходного кода этих проектов, пытаясь определить используемые шаблоны и научиться новым трюкам?

Я видел равное количество веб-страниц, которым нравится и нравится кодовая база Zend (предоставлю ссылки, если это будет сочтено необходимым).

Знаете ли вы о каком-либо другом проекте, который заставил бы любого опытного разработчика ООП пролить слезы радости?

Пожалуйста, позвольте мне добавить, что практичность и сфера использования здесь не являются проблемой - я просто хочу сделать следующее:

  • Выберите проект, у которого есть кодовая база, которую разработчики считают лучше и лучше, чем я.
  • Напишите код, который достигает того, что делает проект.
  • Сравните результаты и постарайтесь узнать то, чего я не знаю.

В основном, академическая база кодов интересов. Любые рекомендации, пожалуйста?


4
Я не эксперт, но я не думаю, что ООП распространен или обязательно поощряется в PHP.
asfallows

3
@asfallows Действительно, так оно и было - но с выходом PHP 5.3 все меняется, и существует явный уклон в сторону использования всех потрясающих новых функций, предоставляемых языком для ООП-кодирования.
Адитья депутат

3
Нет такой вещи, как «идеальный дизайн ООП».
Роберт Харви

1
Я вижу, что вы уже являетесь участником обмена стеками Code Review. Используйте его широко, это самый ценный Stack Exchange при обучении, мы хотели бы увидеть и обсудить код, который вы будете писать при изучении ООП ...
yannis

1
@Arkh Harsh. Давайте попробуем воздержаться от личных атак. Если вы не согласны с asfallows, найдите время, чтобы написать хорошо написанный комментарий.

Ответы:


2

Symfony 2, вероятно, лучший крупный проект для изучения, но он довольно большой.

Недавно я нашел изящный и небольшой PHP-проект с открытым исходным кодом под названием Phrozn (генератор статических сайтов). Его кодовая база относительно мала, поэтому вы можете проверить ее довольно быстро.

ОБНОВИТЬ:

Phrozn современен (использует PHP 5.3+ и сильно зависит от него), он расширяемый, имеет строгое покрытие кода. Он также повторно использует код из других хорошо написанных проектов, таких как Symfony (YAML), Zend (Autoloader), PEAR и Twig.

ООП, использует пространства имен, и это очень хорошо задокументировано. Я не говорю, что он идеален, и его нельзя сравнивать с таким проектом, как Symfony, но он того стоит.


1
Можете ли вы дать нам немного больше информации о кодовой базе Phrozn? Что делает его идеальным для учебы, кроме его размера?
Яннис

1
@YannisRizos :) Код можно найти на github, так что вы можете быстро его просмотреть. github.com/farazdagi/phrozn
Кристиан Р

17

Ну, лично я бы сказал, проверить Symfony2 . Это в значительной степени лучший крупный проект, который я когда-либо видел. Это не значит, что в этом нет ничего плохого, но в целом это довольно хорошо.

Сейчас Зенд в середине. Если вы посмотрите на общедоступный API, он довольно хорош. Есть некоторые части WTF, но по большей части это нормально. Если вы начнете копаться в этом больше, вы найдете намного больше кода WTF ...

Что касается того, чего следует избегать напрямую:

  • CodeIgniter - модель Fubar MVC
  • Кохана - много статики
  • Cake - семантика объектов PHP 4
  • Drupal - совсем не ООП
  • Wordpress - вообще не ООП

Что касается остальных, вы найдете это попало. Есть хорошие и плохие детали для всех проектов. Взгляните на Lithium , у него есть действительно крутые концепции дизайна. Но у этого также есть много перенаправления fubar и взлома, чтобы заставить это работать.

И это то, что взять в банк. Идеального дизайна не существует, не пытайтесь его найти. Вместо этого посмотрите на многие из них и решите сами. Попробуйте каждый, попытайтесь сломать их. Попытайтесь понять их, просто прочитав их (что является хорошим тестом вменяемого дизайна) ...

Просто мое личное мнение ...


2
+1 за symfony2, но что более важно, все сообщество строится вокруг него. ZF2, вероятно, также стоит упомянуть, хотя они, кажется, делают вещи более абстрактными.
Адриан Шнайдер

1
+1 для Symfony2 также. У него действительно солидная кодовая база, он использует множество лучших практик из других языков и фреймворков, отличное сообщество, основные разработчики - полезные, доступные люди. Несмотря на то, что разработка идет по пути рефакторинга, чтобы сделать их лучше, текущее состояние готово к производству. Фабьен Потенциер, создатель Symfony, имеет серию постов в блоге ( fabien.potencier.org ) о создании фреймворка с компонентами Symfony. Это должно быть хорошей отправной точкой, так как он написал эти посты, чтобы помочь людям изучать вещи.
Hakan Deryal

Чтение исходного кода symfony2 на самом деле является источником вдохновения, хотя и не слишком сложным для понимания, хорошая мысль. Однако он не разработан TDD, что, вероятно, стало бы краеугольным камнем для «идеального» дизайна ООП »- потому что ни один дизайн не является идеальным, что означает, что вам нужно его изменить и для этого вам нужны тесты.
hakre

2
Ну, вы не можете серьезно сравнивать Symfony, Zend или Kohana с Wordpress и Drupal.
Даниэль Рибейро

Спасибо! Я скачал Symfony, я начну понимать это. Спасибо за подтверждение моих опасений по поводу CodeIgniter: однажды я услышал на IRC SilverStripe, что «CodeIgniter является OOP Framework для новичков и делает много ошибок новичков» - и они начали писать в PHP4, но у них не было времени, чтобы так много реорганизовать, Я сомневаюсь, что они использовали все замечательные возможности этого языка. Обратите внимание, что я НЕ пропускаю CI! Я люблю рамки, и небеса знают, сколько проектов стало легче для меня, потому что я использовал это. Но для целей обучения это может быть не лучшим.
депутат Адитья,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.