Архив на категорию : 'Продвинутый php'

Novice

Как я обещал в предыдущей статье про SPL – даю обзор некоторых новых возможностей этой библиотеки, появившихся в PHP 5.3. Честно говоря, PHP 5.3 находится в стадии Release Candidate, т.е. это пока нестабильная версия, но исходники ее можно скачать и скомпилировать, после чего оценить эти новые возможности ;)

Итак, что нового в SPL в PHP 5.3… Читать далее »

Novice

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

Начнем с определения: SPL (Standart PHP Library) – это коллекция интерфейсов и классов, предназначенных для решения стандартных задач.

Эта библиотека, устанавливается по-умолчанию для php > 5.0.0, а начиная с PHP 5.3.0 она будет доступна в любом случае (неотделима от пакета php).

Одним из удобств, предоставляемым этой библиотекой являются итераторы.
Для начала можно посмотреть как это выглядит в действии.
Читать далее »

Novice

Сегодня мы рассмотрим технику рефакторинга, противоположную встраиванию класса. Рассматриваемая техника нужна, чтобы поделить работу, которую выполняет один класс, между двумя классами. Для чего это делать? Ну вообще-то класс должен представлять собой четкую абстракцию, которая выполняет лишь определенные операции и ничего более. Т.е. ничего лишнего в классе быть не должно. Со временем, когда добавляются новые функции в класс, он растет. И он может разрастить до таких размеров, что станет слишком сложным для понимания. В этом случае и приходит на помощь техника выделения класса.

Порядок применения техники: Читать далее »

Novice

По мере разработки любой сложной системы выясняется, что необходимо переместить то или иное поле или метод в новый класс. Любое правильное проектное решение через некоторое время может оказаться неправильным.

Суть приема перемещения поля такая же, как и у приема перемещения метода – переместить поле в тот класс, в который его больше всего использует. Причем под использованием здесь подразумевается и косвенное – через методы доступа. Еще, например, есть прием выделения класса, о котором я не говорил. Это противоположный встраиванию класса прием. Так вот, при выделении класса сначала перемещаются поля, а затем – методы.

Пусть у нас есть все те же (я о них упоминал в предыдущих статьях) взаимодействующие классы Account и AccountType: Читать далее »

Novice

В прошлой статье из цикла рефакторинга про встраивание класса я писал, что расскажу о таких приемах, как «Перемещение метода» и «Перемещение поля». Сегодня время пришло написать об одном из них – о первом.

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

Но этот прием не всегда удается провести. Если нет уверенности в его необходимости – то лучше не стоит, особенно в крупных проектах. Почему? Сами знаете :)

Порядок применения приема состоит в следующем. Читать далее »

Novice

Представим себе такую ситуацию, когда мы провели серию приемов рефакторинга и в результате оказалось, что от класса становится мало пользы, т.к. в нем осталось мало функций. Проблема, которая может быть решена с помощью сегодняшнего приема, – это устранение малого класса. Хотя это, конечно, не проблема. Но все же :)

Суть приема встраивания класса состоит в том, чтобы встроить имеющиеся функции нашего класса А в другой класс Б, который чаще всего использует функции класса А. Сам класс А при этом удалить.

Подробно я описывать процесс не буду. Приведу лишь небольшой пример, который далее можно разобрать самостоятельно.

Допустим у нас есть два класса – Person и PhoneNumber. При этом класс Person использует методы класса PhoneNumber: Читать далее »

Novice

Бывают такие ситуации, когда несколько методов выполняют одни и те же действия, но с разными значениями внутри. Например, один метод увеличивает значение стоимости товара на 10, а другой – на 30 единиц. И тут конечно лучше было бы создать просто один метод, но для разных значений, который принимал бы параметр, сколько прибавлять единиц к стоимости – 10 или 30, а может и 50 и т.д. Отсюда и название приема – параметризация метода.

Тем самым мы устраним дублированный код и добавим гибкость в объект, т.к. он сможет обрабатывать другие ситуации, нежели 10 и 30. Т.е. любое число, разумеется.

Вот пример: Читать далее »


Страница 1 из 3123»


© 2008 - 2010 i-novice.net | Все права защищены.