Принцип открытости/закрытости

Оригинал: http://www.sitepoint.com/the-open-closed-principle/

Должен признаться, когда впервые увидел академическое определение принципа открытости/закрытости, его смысл был для меня удивительно ясен. Я отбросил из определения весь технический жаргон, и принцип читался как заклинание, которое мы слышали раньше много раз: «Не ломай ядро».
Ну, правда, здесь существует некоторая двусмысленность высказывания, так как есть по крайней мере два общих подхода к поддержанию «ядра» в полной сохранности, позволяющие аккуратно расширять его функциональные возможности. Первый подход (вот почему я использовал намеренно термин «расширение») — Наследование. Наследование является, пожалуй, самым переоцененным приемом для повторной реализации. Такой процесс легко осуществим, но здесь существует определенный риск разрушить хрупкую иерархию моделей. Второй подход называется Композиция. Подход не так прост, как наследование, но это тоже довольно аккуратный способ расширить программный модуль, не меняя его.


Читать дальше →

Почему некоторые PHP-разработчики предпочитают статические API?

Оригинал: Why do some PHP Developers <3 Static APIs?

В мире существуют две разновидности PHP-разработчиков. Одни предпочитают статические методы, потому что с ними легко работать, другие же, напротив, считают статические методы — зло и не используют их в своей практике.
В этой статье попробую, используя опыт работы с несколькими фреймворками, объяснить, почему некоторые разработчики игнорируют лучшие практики и используют целую кучу статических методов.

Читать дальше →

FAQ: Как заставить IDE автокомплитить scope методы в ActiveRecord Yii2

В последнее время часто стали задавать вопрос — как же заставить IDE дополнять предустановленые в модели scope методы. Для начала посмотрим, как разработчики фреймворка предполагают работу со scopes.

Вкратце. В модели создается статический метод, который дергается классом ActiveQuery черезе магический метод __call. Но эти методы не подхватываются IDE (на примере PhpStorm 7).



Читать дальше →

Traits vs Behaviors

Q&A
Кто что предпочитает? Какие плюсы и минусы есть? Я раньше их не использовал. Но сейчас в проекте слишком разрослись модели, хочется их разделить. Что по вашему лучше использовать?

Задайте вопрос специалисту



Добрый день многоуважаемое сообщество.

Сегодня на нашем сайте появился новый блог Q&A (Вопросы и ответы). В этом блоге Вы можете задавать свои самые каверзные (и не очень) вопросы, связанные с программирование на PHP. Наши специалисты окажут Вам совершенно бесплатную консультацию по Вашему вопросу.

Для того, чтобы задать вопрос, необходимо подписаться на блог Q&A и создать в нем топик-вопрос.

Надеемся, что нововведение окажется полезным для Вас.

С уважением, PHP Time.

Ответ на «микрооптимизацию в PHP»

Оригинал: A Response to “Micro-Optimizations in PHP”

На прошлой неделе я прочитал пост, рекомендованный мне в PHP Weekly. Он назывался Микрооптимизация в PHP. Я повелся, ведь всегда стремлюсь быть лучшим PHP разработчиком. Пост начинается с общих рекомендаций, которые, по сути, являются даже не микро-, а микро-микрооптимизацией. Продолжая читать, я приходил к выводу, что описанное в тексте и вовсе имеет мало общего с оптимизацией. В итоге я могу сказать, что пост был написан безответственно — заявления автора не имели обоснований.

Обидно, что я получаю такие низкокачественные посты из рассылки PHP. Подобные статьи путают разработчиков, что, в свою очередь, способствует созданию некачественных приложений в сообществе PHP-разработчиков. Эта ситуация заставляет задуматься о росте числа хейтеров PHP.

Я не сомневаюсь в том, что автор писал статью с исключительно добрыми намерениями. Но, по крайней мере, он должен был предоставить доказательства сделанных в статье заявлений. В конце концов, хороший разработчик должен всегда спрашивать,почему? Я прочитал рекомендуемые в том посте оптимизации. Я оценил рекомендации с точки зренияабсолютной правды и обозначил каждую из них как истина или ложь. Пожалуйста, ознакомьтесь с полным текстом, прежде чем заметите ошибки.

Читать дальше →