Какой проект 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.