Прошу посоветовать небольшой проект с открытыми исходниками с целью обучения PHP на примере «как это делают большие дяди». Качественный код (на ваш вкус), ООП (по возможности), небольшой объем (Drupal, WP и других монстров не предлагать), живое сообщество. Что бы было реализовано: разделение доступа, работа с БД, кеширование средствами PHP (необязательно), может, какие другие типичные задачи. Если будет еще и документация для разработчиков — вообще прекрасно. Еще одно пожелание, скорее всего, несбыточно: что бы соответствовал последним изменениям в языке, то есть что бы код был PHP 5.3.
Заранее благодарю, товарищи. Да прибудет с вами Сила.
Возможно не в тему, но после знакомства с Питоном и джангой, как-то с ужасом вспоминаю былые годы, когда писал на ПоХаПэ :)
PS сам никогда не смотрел как делают большие дяди, в бою всё интереснее позновать, тоесть решать определённую задачу… рост сам по себе приходит… ведь я думаю у многих бывало, когда смотришь свой код написанный 2-3 года назад :)
Ну дак odmin4eg как был тем человеком, который писал код, так и остался. И считает, что на django/python он пишет код лучше.
У меня вот то же самое — я писал плохой код на php, а теперь пишу хороший на python/django. Человек 1, инструменты разные. Писать хороший код на python проще, чем хороший код на php, python учит писать хороший код, php постоянно провоцирует плохой код. Мне кажется, python way полезно освоить каждому программисту — и на том же php программист после этого будет писать код лучше (правда, писать на php вряд ли потом захочется).
kmike, как он учит? Вот делаю сейчас два проекта — один на php (знаю его лет 10, начинал на php3, сейчас на 5.3 пишу), другой на python (недавно стал изучать, just for fun) — разницу чувствую только в синтаксисе, более-того php оказывается более строго контролирует меня — запрещает обращаться к приватным методам/данным, заставляет реализовывать все методы интерфейса, контролирует тип передаваемых параметров-объектов и т. п., то есть позволяет средствами языка поддерживать архитектуру приложения в задуманном красивом виде, а python позволяет писать практически всё, что в голову придёт (или не писать, что не пришло, а надо бы) — раньше считал это достоинством php :-/, но та свобода, которую даёт python как-то напрягает.
Учит, например, не городить огород и не наворачивать «красивые» архитектуры, когда можно обойтись простой парой коротких функций) А типизация в питоне строже. Если честно, уже поднадоело мнение, что ООП — это панацея, и чем его больше, тем лучше. Я давно уже прочитал все эти книжки по паттернам, рефакторингу и тд. — Фаулер, банда четырех, Бек и др. Это замечательные книжки, в них много всего полезного написано и правильного, и они обязательны к прочтению для каждого программиста. Но этап восхищения прошел, теперь ясно, что бездумное и неоправданное применение ООП приводит к усложнению проектов, что ООП — далеко не единственный инструмент, и что если его можно не применять — его лучше и не применять. Книжки были написаны для языков Java и C++, тот же python (и другие функциональные динамические языки) гораздо гибче, многие паттерны из тех книжек в нем либо не нужны, либо реализуются средствами языка. В php же почему-то в последнее время тенденция тянуть как можно больше всего из Java и считать, что это круто, эдакое послание высшего разума низшему.
То ли архитектуры у меня идеальные, то ли не python way (второе, конечно, вероятней :D ), но собственно архитектуры php и python приложений у меня идентичны и многое взято из «всех этих книжек», т. к. их прочтение просто то многое (не всё, что-то было «вау!», например, DataMapper или TDD, что-то «а нафига?»), к чему пришёл «инстинктивно», формализовало. ООП панацеей не считаю, т. к. с одной стороны на современных компах все в недрах транслятора сводится к вполне себе процедурному, если можно так выразиться, ассемблеру, а с другой — функциональные и прочие декларативные языки на каких-то задачах могут облегчить жизнь разработчику, но на практике, исходя того что я о них знаю, ни разу не встречал задачу, про которую мог бы с уверенностью сказать, что её проще решить через ФП или ещё как-то, но не процедурно и/или через ООП, разве что шаблонизацию через XSLT сделать. Может задачи такие (чуть посложнее простого CRUD и давно только через http), может просто знаний не хватает, чтоб определить это (в ВУЗе вообще проходили, по сути, синтаксис языков, таких как Fortran, ObjectPascal, C, C++, Asm — не только для x86, но это издержки специализации, не просто ИТ, а ИИ(змерительная)Т), но ООП для меня прежде всего способ «красиво» (читай — понятно для себя через пару лет и поддерживаемо) оформить процедурное, в принципе, решение, а на чём конкретно, php или python (также думаю, без особых проблем cмогу перейти на ruby, java, C#, ...) не важно. А Python, кстати, всегда считал ООП-языком с какими-то элементами ФП, часть из которых непонятно зачем (для моих задач) добавили и в PHP недавно. В общем как-то так получается, что код мой от языка мало изменяется, только в рамках требований синтаксиса — тут скобочки, а тут отступ, тут function, а тут def, тут интерфейсы, а тут множественное наследование и т. п., а значит язык ничему особо не учит.
Возможно не в тему, но после знакомства с Питоном и джангой, как-то с ужасом вспоминаю былые годы, когда писал на ПоХаПэ :)
PS сам никогда не смотрел как делают большие дяди, в бою всё интереснее позновать, тоесть решать определённую задачу… рост сам по себе приходит… ведь я думаю у многих бывало, когда смотришь свой код написанный 2-3 года назад :)
Собственно, вопрос и ответ в двух абзацах.
Ну и плюс ко всему, я всегда слегка недоверчиво относился к людям, которые пренебрежительно относятся к какому-либо популярному языку программирования. То ли тетрисы на бейсике Вы не писали, то ли мультики на ассемблере не делали.
PHP — это самое большое коммьюнити среди всех языков, предназначенных для веб-разработки, как ни крути. Единственная беда — есть те, кто пишет на пи-эйч-пи, есть те, кто ваяет на похапэ. Но как по мне — это совсем разные люди и в реальной жизни они почти не пересекаются.
Рекомендую поглядеть Yii, он написан с использованием best practices, ООП, паттернов и прочих новомодных штук) Можно поглядеть коды других фреймоврков (kohana, cakephp, symfony) на свой вкус. Drupal и WP хоть и популярны, но во многом далеки от бест практик, хотя несомненно и там есть что посмотреть.
ZF — это мягко сказать ужасен проект как пример, библиотеки — да, но только не весь фреймверк, который у вас загнется при 20К в онлайне пользователей на сайте.
1) Идеальный пример правильного проектирования является Yii, имхо. Мало того, что он сам по себе сделан супер, с идеальной скоростью, правильным проектированием, но он так же позволит приучить вас правильно писать.
Так что я бы Вам советовал использовать именно Yii как пример
Когда работал с форумами мне понравилась реализация phpbb3. Там есть и кэширование, и интерфейс для работы с разными базами данных, и разделение доступа по неограниченным уровням. Но он кажется не очень маленький, но очень хорошо структурирован.
Ну можно и к нам заглянуть (Limb фреймворк, исходники: https://github.com/limb-php-framework/limb, документация: wiki.limb-project.com/, форум: forum.limb-project.com/), не претендую на «больших дядь», но пользователи говорят, что качество кода хорошее + большое покрытие тестами и все вами перечисленное, кроме PHP 5.3.
Код разбит на отдельные пакеты (с зависимостями друг от друга), каждый из которых можно изучать отдельно.
Все разработчики из России и СНГ, если что — спрашивайте на форуме, поможем.
Планируете использовать новые фичи 5.3, в частности неймсмейсы, ценой отказа от BC? Про отложенную привязку кажется на форуме видел что-то, что работает, но как бы недокументировано, само собой так получилось :)
Пока что нет, как минимум не в этом релизе. Отказ от BC это вряд ли та цена которую мы можем заплатить, но начать параллельно новую ветку разработки вполне возможно. К сожалению, пока на это просто не хватает человеческих ресурсов и сил.