Глава 15. Классы и объекты в PHP
Наряду со ссылками и модулями в РНР появились классы и объекты. При написании программ необязательно пользоваться объектами, в отличие от языка Java, где программы представляют собой экземпляры объектов. Объект представляет собой переменную, принадлежащую к некоторому классу. Методами называться функции, ассоциируемые с классом или объектом.
РНР поддерживает несколько разных стилей. Благодаря этому программисты решают свои задачи так, каким нравится.
Эта глава является большим помощником для создателей больших программ. Излагаемая здесь информация является ключевой для понимания объектно-ориентированного подхода к программированию.
Если вы предпочтете оставить ознакомление с классами на потом и остаться верным структурному программированию, отложите изучение этой главы. Конечно, при этом ваше представление о средствах языка останется незавершенным, поэтому лучше прочтите ее и сохраните в уме до лучших времен, когда накопленный опыт и знание скрытых механизмов сделают излагаемый материал более доступным.
Когда вы будете к этому готовы, данная глава станет вашим первым шагом к пониманию того, так с помощью РНР решать весьма сложные задачи.
В этой главе вы найдете следующую информациию о работе классов:
• обзор классов как типов данных;
• все ли можно считатьклассами;
• когда использовать классы;
• когда не использовать классы;
• синтаксис классов;
• данные класса;
• методы класса;
• задания значений изменяющимся переменным в классах;
• расширение классов;
• работа с переменными класса;
• манипуляция с именами;
• манипуляция уровнем сложности при работе с классами;
• указатель на самого себя $this;
• замечания по объектной терминологии;
• ссылки внутри конструктора.
15.1. Обзор классов как типов данных
Классы введены в язык как средство выражений взаимосвязей между данными и функциями путем связывания их в целую конструкцию. Цели создания подобных конструкций могут быть разнообразными, например теми же, которыми мы руководствуемся, используя простые определения для обозначения сложных понятий материального мира.
Например, фраза «О какой прекрасный бриллиант» несет в себе ту же информацию, что и фраза «Какой исключительно элегантный экземпляр ограненного кристаллического спрессованного углерода». Все это длинное определение умещается в слове «бриллиант».
Эта особенность человеческого мышления обеспечивает возможность оперирования сложными явлениями посредством простых понятий, что неимоверно упрощает как общение, так и программирование. Если удается сводить методы манипулирования классами к операциям и интуитивно понятным функциям, то сколь угодно сложные классы можно сделать практически столь же как и базовые типы данных.
Достичь этого не всегда просто, но язык РНР, со своей стороны, обеспечивает программиста всем необходимым, позволяя выражать весьма сложные вещи в понятном и наглядном виде.
15.2. Все ли можно считать классами
Не переусердствуйте — не стоит пытаться все подряд представлять в виде классов. Во многих случаях классы являются не самым подходящим средством. Хотя это не мешает вам разобраться, насколько они подходят для реализации вашей концепции.
15.3. Когда использовать классы
Дадим несколько общих советов о том, как выяснить, когда стоит использовать классы и когда лучше обойтись без них (но не воспринимайте эти указания как догму):
• если в вашу абстракцию входит более одной-двух составных частей, независимо, данных или функций, то смело создавайте класс;
• старайтесь также использовать классы в тех случаях, когда следует обеспечить корректную инициализацию и деинициализацию ресурса. Это относится к таким вещам, как файлы, аппаратные устройства или процессы, требующие определенной серии шагов для инициализации и освобождения ресурса.
15.4. Когда не использовать классы
Обычно без классов можно обойтись:
• когда ваша конструкция содержит слишком мало данных-членов или функций-членов;
• одиночные функции также чаще всего бессмысленно оформлять в виде класса, примером этого могут служить алгоритмы сортировки или поиска (единственным переменным звеном в сортировке или поиске может являться тип данных).
Сложность программирования заключается помимо всего прочем еще и в что оценка качества решения в высшей степени субъективна. Если два радикально отличающихся решения обеспечивают правильный результат и примерно одинаковое время выполнения, то какая реализация лучше, а какая хуже — это в значительной степени дело вкуса. Сейчас, пока вы учитесь, просто стремитесь к правильности. Достигнув достаточного мастерства, делайте акцент в сторону выразительной простоты, и лишь потом уделяйте внимание скорости. Правильно — это всегда лучше, чем быстро и неверно, с простыми выражениями легче работать, чем с длинными.