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

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

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


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

Группа PHP-FIG и разделяемые интерфейсы

Оригинал: On php-fig and Shared Interfaces

Этот пост я написал по просьбе Эверта Пота, с которым успел пообщаться во время голландской конференции PHP в июне 2012 года. В статье подробно рассмотрены некоторые наблюдения, связанные с группой PHP-FIG и, надеюсь, после прочтения вы поймете, почему я больше не принимаю непосредственного участия в ней.

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

Ловушки PHP

Оригинал: PHPitfalls

После прочтения статьи Securing PHP, написанной Джеймсом Каннингемом, я подумал, что неплохо бы собрать воедино несколько тезисов об использовании PHP. Имейте в виду, что я не эксперт по вопросам безопасности. Однако эта статья содержит несколько отправных точек по предотвращению заражения экcплоитами, повышению защищенности PHP-приложений и прочим вещам, которые я считаю самыми полезными из своей практики. Ваша оценка может (и, вероятно, будет) колебаться: нормально воспринимать все с недоверием. И это не зависит от того, где вы прочтете такую информацию — здесь или в другом месте. Это не столько контрольный список конкретных действий, сколько набор правил, на которые надо обратить внимание при программировании.

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

Getter’ы и Setter’ы — магия, которая должна знать свое место

Оригинал: Getters and Setters — a Magic That Should Know Its Place

Джозеф Кроуфорд, один из моих читателей, прочитал статью о том, как я не люблю писать getter’ы и setter’ы и предположил, что я могу использовать волшебные методы __get и __set.
Я скажу вам, почему это не очень хорошая идея, использовать их обычным способом. Кроме того, я собираюсь поведать вам историю, где они действительно оказались полезными, — речь пойдет о создании статических типов в PHP (динамический язык).
Для тех, кто не знаком с методами __get и __set — это два «магических» метода, которые работают следующим образом:
class Animal {
  function __get($property) {
    //...
  }

  function __set($property, $value) {
    //...
  }
}

$cow = new Animal;
$cow->weight = '1 ton'; // same as $cow->__set('weight', '1 ton')
print $cow->weight;     // same as print $cow->__get('weight');


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

Еще раз о росте PHP

Оригинал: PHP just grows & grows.

Аналитическая компания Netcraft занимается мониторингом веб-серверов с 1995 года, в числе прочего отслеживая применение широкого спектра скриптовых технологий в сети, — с 2001 года. Одной из таких скриптовых технологий является язык PHP, который в настоящее время отмечен компанией Netcraft на более чем 200 миллионах веб-сайтов.

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

Почему FastCGI + Nginx быстрее, чем Apache + mod_php?

Оригинал: Why is FastCGI /w Nginx so much faster than Apache /w mod_php?

Сначала я собирался написать пост о том, почему Nginx в связке с FastCGI работает быстрее, чем Apache с mod_php. Не так давно ходили слухи, что Nginx с запущенным PHP через FastCGI производительнее, чем Apache с mod_php. Многие знакомые утверждали, что это чистая правда. Некоторое время назад я провел небольшое исследование по этому вопросу и собрал интересные факты.

Сегодня я хотел бы подробно рассказать о своих поисках истины и проанализировать получившиеся результаты. Так вот, для начала замечу, что раньше мне приходилось увеличивать производительность. Если мне не изменяет память, это было необходимо и для работы с Magento.

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

Эффективный рефакторинг


Оригинал: Effective Refactoring Strategies

Мой брат называет предновогоднюю неделю «потерянной» — за это время почти ничего невозможно сделать, потому что большинство людей уходят в отпуск, а оставшиеся заняты предновогодними приготовлениями. В это время у начинающих разработчиков программного обеспечения появляется прекрасная возможность сделать одну вещь, на которую у них всегда вечно не хватало времени: самое время сделать код более доступным для понимания.
У большинства разработчиков есть возможность выкроить несколько часов свободного времени для рефакторинга. Они могут, наконец, поменять сделанную в спешке еще в сентябре архитектуру разделов, могут написать тесты для разделов, которые остались непроверенными с апреля. Иными словами, за «потерянную неделю» можно сделать много полезных дел.
Но прежде чем погрузиться в пучину оптимизации кода не на шутку, следует учесть некоторые соображения.

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

Почему некоторые люди ненавидят PHP

Хватит верить слухам! В PHP сейчас все не так плохо!Оригинал: Why some people hate PHP

Это мой ответ на пост Quora Пользователи ненавидят PHP только из-за того, что так поступает большинство.

Существует масса причин, почему люди «ненавидят» или по крайней мере косо смотрят на PHP. Некоторые из них являются обоснованными, а другие предвзятыми.

Непоследовательность haystack / needle

Часто программисты говорят о непоследовательности haystack / needle, но это происходит из-за незнания одного простого правила:
array: needle, haystack
string: haystack, needle
На самом деле это довольно простой момент, но люди часто забывают об нем и выбирают более сложный путь.

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

Шаблонизаторы

Оригинал: On Templating

В последнее время я много работал с различными шаблонизаторами. Для последнего проекта требовалось повторное использование одного и того же набора шаблонов в приложениях JS и PHP (в сочетании с History API обеспечивается бесшовное динамическое поведение, но все еще имеющее сырой вид). На самом деле, сегодня есть только одно решение для такого рода задач — шаблонизатор Mustache. Я многому научился, работая с Mustache, и он действительно изменил мою точку зрения на сложные конструкции кода.

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

Почему я перестал следовать стандартам программирования

Оригинал: Why I Have Given Up on Coding Standards

Каждый разработчик знает, что у него должен быть стандарт программирования, принятый в компании. Каждый разработчик также знает, что нужно постараться, чтобы ваши собственные правила попали в стандарты компании. Каждый разработчик в тайне отчаивается уже в тот момент, когда начинает работу над новым проектом… Он боится тех стандартов, которые мог придумать какой-нибудь сумасшедший архитектор.

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

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