Итерирование объектов в php. Встроенные классы-итераторы. Объект как массив

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

ООП в PHP: Абстрактные классы и интерфейсы

Одной из вещей, которая делает код более расширяемым, является полиморфизм. Я уже упоминал про него в нескольких предыдущих статьях. Напомню, что полиморфизм проявляется, когда версия переопределённого метода в цепочке наследования определяется прямо при его вызове исходя из типа объекта, от которого этот метод вызывается. Для того чтобы убедиться в наличии нужного нам метода у объекта можно проверять его тип при помощи оператора instanceof или уточнить тип аргумента метода. В этом случае, конечно, метод должен быть реализован хотя бы в том классе, имя которого мы указываем при использовании оператора instanceof или задаём в качестве типа аргумента. Теперь представьте, что нам нужно задать, что нужно уметь делать экземплярам заданного типа, но мы пока не знаем как они это будут делать. То есть нам необходимо обязать иметь реализацию некоторого метода в ветке наследования. Читать далее ООП в PHP: Абстрактные классы и интерфейсы

ООП в PHP: Исключения

Под исключительной ситуацией понимают такую ситуацию возникшею в ходе выполнения кода, когда неясно, что делать дальше или дальнейшее выполнение кода бессмысленно. К примеру, скрипту не удалось установить соединение с базой данных, тогда добавление или выборка данных из неё заведомо бессмысленна. В php в подобных ситуациях часто нативная функция просто возвращает false и выполнение заведомо неработающего кода продолжается. Чтобы избежать подобной ситуации можно проверять значение возвращаемое функцией и, в случае если оно говорит о произошедшей ошибке, выводит предупреждение. Такой подход имеет некоторые недостатки. Во-первых, для изменения действий выполняемых при ошибке пользователю вашего кода придётся редактировать ваш код. Намного лучше было бы позволить ему самому определять механизм обработки этой ошибки. Во-вторых, возвращённое функцией значение не всегда может быть верно расценено, или вовсе остаться непроверяемым, тогда в случае ошибки придётся тратить время на выяснение её причин. В-третьих, не всегда верно стремиться обработать любую проблему прямо в методе или в функции, ведь в таком случае валидация параметров и обработка ошибок может загромоздить изначально достаточно простой код. Намного лучше каким-нибудь образом сообщить пользователю вашего кода, что что-то пошло не так, позволив ему самому решать, что делать в таком случае.

Для решения всех этих проблем и был придуман механизм обработки исключений. Читать далее ООП в PHP: Исключения

ООП в PHP: Наследование

inheritanceИз первой статьи в этой рубрике можно было узнать, что при помощи механизма наследования один или несколько классов-наследников могут приобрести свойства и методы своего класса-предка. Такой подход позволит не дублировать код, что плохо по некоторым причинам. Во-первых, если код дублируется, то писать его приходится больше и дольше. Во-вторых, в случае, если в код нужно будет внести некоторые изменения, то делать это придётся в нескольких местах. В-третьих, если дублируется код, то дублируется и ошибка, если она была допущена, и исправлять её придётся в нескольких местах. Кроме того при помощи наследования реализуется полиморфизм – механизм, который позволит сделать ваш код более расширяемым. Читать далее ООП в PHP: Наследование

ООП в PHP: Магические методы. Методы-перехватчики

magic-methods-phpЛюбой нативный метод в php, который начинается с __ называются магическим. Вся «магия» таких методов состоит в том, что они могут вызываться при совершении какого-то действия автоматически и без ведома программиста. С одним из очень важных магических методов мы уже вскользь познакомились в предыдущей статье в этой рубрике, это метод __construct, который называют конструктором. Он вызывается при создании экземпляра класса и, как правило, выполняет действия по его инициализации.

Не менее значимые, на мой взгляд, магические методы это методы-перехватчики __get, __set, __isset, __unset, __call. Назвали их так за то, что они словно перехватывают обращение к недоступным или несуществующим членам класса. Читать далее ООП в PHP: Магические методы. Методы-перехватчики

ООП в PHP: Классы, экземпляры класса, поля, методы и конструкторы

Как вы узнали из предыдущей статьи, класс представляет собой описания некоторых схожих между собой объектов. В этой статье мы подробно на примерах рассмотрим, как именно описываются данные, которые будет хранить экземпляр класса, и его поведение, то есть методы.

Эта статья будет полезна тем, кто уже достаточно хорошо знает не объектно-ориентированный php, но до изучения ООП в этом языке ещё не дошёл. Читать далее ООП в PHP: Классы, экземпляры класса, поля, методы и конструкторы

ООП в PHP: Введение

Object-Oriented-Programming-PHPЭто первая, а лучше сказать нулевая статья в рубрике «ООП в PHP». Она будет полезна как совсем зелёным новичкам, так и тем, кто уже достаточно хорошо умеет писать не объектно-ориентированный код и хочет узнать для чего же всё-таки нужно ООП.

Написать про ООП в php несколько статей меня заставило то, что я не нашёл удовлетворивших меня статей по этой теме. Есть сухие и скучные официальные мануалы или статьи, где излагаются, по сути, те же мануалы только с более подробными примерами, так же в сети очень много устаревшей информации по этой теме. Читать далее ООП в PHP: Введение