Объектно-ориентированный PHP: подробнее о методах и полях класса. Почти детективный сюжет

Объектно-ориентированный PHP: подробнее о методах и полях класса. Почти детективный сюжет

Объектное программирование

Объектно-ориентированное программирование (ООП) на PHP

Объект – это набор специальных переменных – свойств и специальных функций – методов. То, что в процедурном программировании называлось переменной — в ООП называется свойство. То, что в процедурном программировании называлось функцией — в ООП называется методом класса. Созданные на основе класса объекты называются экземплярами класса или просто объекты.

Обращение из метода к свойствам только через служебное слово $this: $this->name; (обратите внимание на отсутствие знака доллара перед name) Обращение внутри метода к другому методу тоже через $this: $this->foo(); Для доступа к свойствам и методам объекта служит оператор “->”: $this->name; (обратите внимание на отсутствие знака доллара перед name)
Обращение внутри метода к другому методу тоже через $this: $this->foo(); . Объект создается с помощью оператора new на основании шаблона, называемого классом. Класс определяется ключевым словом class.

Пример 1

Модификаторы доступа в ООП:

  • public — позволяет иметь доступ к свойствам и методам из любого места (глобальная область)
  • protected — доступ к родительскому и наследуемому классу (область класса наследника)
  • private — доступ только из класса, в котором объявлен сам элемент (область самого класса)

Метод по умолчанию — public. У свойств значения модификатора по умолчанию нет.

Константы класса в ООП

this и self

Внутри класса использована специальная переменная this. Это указатель, с помощью которого объект может ссылаться на самого себя.

Для обращения к статическим методам используется self::

Методу Пока передан аргумент точно так же, как и обычной функции. При вызове этого метода объект меняет свое свойство имя.

Маша! Привет!


Миша! Привет!


Яша! Пока!


Яша! Привет!

Конструктор — это метод, который автоматически вызывается при создании нового объекта: public function __construct()<> . При инициализации6 объекта через служебную конструкцию new, PHP ищет __construct и если он есть, то вызывается.

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

Пример 2


Кто-то там! Привет!


Миша! Привет!


Маша! Привет!

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

Руководство по ООП на PHP

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

Одним из самых значительных изменений в PHP 5 является наличие полностью объектной модели, которая позволяет повысить производительность. К одним из важных новых функций, добавленных в PHP 5 , относятся окончательные и абстрактные методы, классы, интерфейсы, клонирование и магические методы. Мы рассмотрим в данном руководстве ООП PHP примеры применения каждого из них.

В объектно-ориентированном программировании объект обрабатывается так же, как ссылки или указатели. Это значит, что каждая новая переменная содержит ссылку на объект, а не копию всего объекта.

Самой трудной для понимания концепцией являются основы ООП , так как они отличаются от обычного программирования на PHP. Но как только вы поймете основные принципы, сама модель станет для вас простой и понятной.

Что такое ООП на PHP?

Поскольку термин объектно-ориентированное программирование начинается со слова « объект «, то мы можем сказать, что это особый тип программирования, при котором создаются и используются объекты.

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

Автомобиль является объектом. Он имеет атрибуты цвета, размера, веса и функцию перемещения. Любой объект без функционала будет бесполезным. В ООП программист использует объекты; каждый объект имеет некоторые атрибуты и функции. В целом программирование сводится к построению модулей с помощью объектов.

Простое определение объектно-ориентированного программирования:

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

Другими словами, ООП позволяет программисту группировать аналогичные задачи в классы, класс может содержать данные и функции для доступа к этим данным, связанные друг с другом.

Читать еще:  Как рисовать купидона карандашом поэтапно. Рисуем ангела любви: как нарисовать купидона

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

Важные термины руководства по ООП на PHP:

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

Класс

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

Объект

Объект также известен как экземпляр. Когда устанавливается экземпляр класса, создается объект. Если класс — это образец, то объект — это конечное изделие, созданное с помощью образца. После того, как класс был определен, из него может быть создано множество объектов.

Переменная-член

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

Функция-член

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

Конструктор

Конструктор — это особый тип функции-члена. Когда устанавливается класс, создается объект, эта функция вызывается автоматически и присваивает начальные значения переменным класса.

Деструктор

Это особый тип функции, которая вызывается автоматически, когда объект удаляется.

Наследование

В PHP 5 ООП наследование – это процесс, при котором класс ( подкласс ) получает все атрибуты и функции другого класса (суперкласса).

Суперкласс

Также известен как базовый или родительский класс — наследуется одним или несколькими подклассами.

Подкласс

Дочерний или производный класс, подкласс наследуется от суперкласса.

Полиморфизм

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

Инкапсуляция

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

Абстракция

Абстракция означает, что детали реализации функций или классов не видны.

Перезагрузка

Термин ООП , который означает, что функции, имеющие одинаковые имена, но разное количество аргументов, выполняются по-разному.

Классы и объекты:

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

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

До этого объект был кучей дерева, кирпича, цемента и т.д., из которых в соответствии с информацией из плана был построен дом или объект:


Класс в PHP ООП — это план или шаблон, по которому устанавливается экземпляр класса, создается объект. После того, как был создан класс, мы можем создать столько объектов, сколько захотим. На рисунке, приведенном выше, из одного класса ( плана ) были созданы пять объектов ( домов ). Объект всегда будет соответствовать инструкциям, приведенным в классе, используемом для его создания.

Преимущества ООП на PHP:

  1. Улучшение архитектуры и более чистый код

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

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

  1. Простота в обслуживании и обновлении

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

Читать еще:  Белорусский государственный академический музыкальный театр: о театре, репертуар, труппа, адрес. Кто имеет право на льготные билеты в музеи и выставочные центры

Инкапсуляция означает, что значения переменных объекта не видны извне, следовательно, реализуется безопасность данных. Но если возникает необходимость, доступ к данным может быть получен с помощью модификаторов доступа. Для создания безопасных программ данные и функции-члены в классе могут быть скрыты от других классов. Когда объект создан, для его использования не нужна информация о его реализации.

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

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

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

Данная публикация представляет собой перевод статьи « PHP OOP Tutorial » , подготовленной дружной командой проекта Интернет-технологии.ру

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

Автор: Антон Кургузенков
Дата записи

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

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

Описание класса и создание его экземпляра

Описание класса в PHP начинается с ключевого слова class. После него следует имя класса. Именовать классы принято с большой буквы. После имени класса в фигурных скобках следует описание членов класса – его полей (данных) и методов.

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

$экземплярКласса = new ИмяКласса();

Поля класса

При описании полей класса нужно указывать спецификатор доступа – ключевое слово, которое будет определять область видимости поля, к которому оно относится. В php есть три спецификатора доступа: public, protected и private. Спецификатор public обеспечивает доступ к полю из любого места, protected – только из классов стоящих в той же цепочке наследования (из класса-потомка, из потомка потомка и т.д.) и private запрещает доступ ото всюду, кроме самого класса. После спецификатора доступа идёт имя поля, предварённое знаком доллара.

В устаревших версиях php не было спецификаторов доступа и для объявления полей класса использовалось ключевое слово var:

Мы не будем подробно рассматривать этот синтаксис, как устаревший, но знать о нём нужно, поскольку во времена, когда старые версии php были актуальны, было написано невообразимое количество кода и он до сих используется во многих проектах. При таком синтаксисе поля класса доступны извне, как если бы они были объявлены со спецификатором доступа public.

Для доступа к полям класса используется символ ‘->’. Имя поля, к которому мы хотим обратиться пишется без знака доллара. Поля доступны извне класса в этом случае, потому что мы используем спецификатор доступа public.

$user = new User(); $user->login = ‘true-coder’; $user->password = ‘qwerty’; echo “Логин: $user->login
“. // Логин: true-coder “Пароль: $user->password”; // Пароль: qwerty

Значение полей класса по умолчанию – null:

$user = new User(); echo “Логин: “.getType($user->login).”
“. // Логин: NULL “Пароль: “.getType($user->password); // Пароль: NULL

В php допустимо обращаться к полю, имя которого содержится в строковой переменной:

$user = new User(); $propertyName = ‘login’; $user->$propertyName = ‘true-coder’; $propertyValue = $user->$propertyName; echo “$propertyName: $propertyValue”; // login: true-coder

Такая возможность позволяет в ходе работы скрипта в зависимости от различных условий определять имя поля к которому нужно обратиться.

Значение полей класса по умолчанию можно установить прямо при объявлении любым литеральным (явно указанным) значением. При объявлении нельзя присвоить полю класса результат работы функции, за исключением array(), или экземпляр класса.

Обращение к несуществующему полю (свойству) в PHP не вызывает ошибки и, если присвоить такому полю значение, то оно сохранится в экземпляре объекта. Такие поля или свойства называют динамически определяемыми.

$p = new Point(); $p->z = 10; echo “z: $p->z”; // z: 10

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

Читать еще:  Выигрышные билеты русское лото тираж. Как в Столото проверить билет по номеру: жилищная лотерея, русское лото

На практике такой код, как в классаx User или Point не приемлем. Доступ к полям класса, за редким исключением, необходимо осуществлять посредствам методов, а сами поля делать недоступными за пределами класса или цепочки наследования. Кроме того неудобно присваивать значения полям уже после создания объекта.

Методы класса

Как я говорил ранее, методы описывают поведения экземпляров класса, то есть действия, которые они могут совершать. Описания метода в классе, как и описание поля, начинается со спецификатора доступа, затем следует ключевое слово function, имя метода и список параметров в круглых скобках. Внутри метода доступ к текущему экземпляру класса можно получить при помощи ключевого слова $this, которое, в отличии от многих других языков программирования, в PHP пишется со знаком доллара. За пределами класса вызов методов производится с указанием имени экземпляра класса. Как и для доступа к полям, для вызова методов используется символ ‘->’.

Пусть у нас есть класс, описывающий прямоугольники с полями, хранящими высоту и ширину, и с методом, который считает площадь прямоугольника.

Создадим экземпляр этого класса и вызовем метод getArea:

$rect = new Rectangle(); $rect->width = 15; $rect->height = 20; echo $rect->getArea(); // 15 * 20 = 300

В старых версиях php, как я уже говорил, не было спецификаторов доступа и все методы были по сути публичными. В php 5 для обеспечения обратной совместимости допустимо опускать спецификатор доступа при объявлении метода. Тогда он будет публичным, но это считается дурным тоном, поскольку область видимости метода не указана явно, поэтому всегда указывайте спецификатор доступа.

Как и функции методы класса могут принимать параметры. Немного расширим класс Rectangle, добавив в него координаты верхнего левого угла и метод translateTo переносящий прямоугольник в указанную точку:

Создадим экземпляр класса, присвоим его поля значения и вызовем метод translateTo с какими-нибудь параметрами:

$rect = new Rectangle(); $rect->width = 15; $rect->height = 20; $rect->x = 10; $rect->y = 20; echo “Координаты до перемещения:
“. “x: $rect->x
“. // x: 10 “y: $rect->y
“; // y: 20 $rect->translateTo(30, 40); echo “И после:
“. “x: $rect->x
“. // x: 30 “y: $rect->y”; // y: 40

Конструкторы

Для того, чтобы присвоить полям значения при создании экземпляра класса существуют конструкторы. Конструктор у класса в php может быть только один и если он не объявлен, то значения экземпляра остаются равными значениям по умолчанию. При объявлении конструктора указывается спецификатор доступа, затем пишется ключевое слово function и __construct. Конструктор, как и метод, имеет доступ ко всём полям класса через ключевое слово $this. Можно рассматривать конструктор как метод, который вызывается при создании экземпляра класса. Напишем конструктор и для нашего класса.

Теперь можно создать прямоугольник вот так:

$rect = new Rectangle(10, 20, 100, 200); echo “x: $rect->x
“. // x: 10 “y: $rect->y
“. // y: 20 “Ширина: $rect->width
“. // Ширина: 100 “Высота: $rect->height
“; // Высота: 200

В старых версиях php имя конструктора должно было совпадать с именем класcа, то есть в нашем случае он выглядел бы так:

function Rectangle($x, $y, $width, $height) < $this->x = $x; $this->y = $y; $this->width = $width; $this->height = $height; >

Это устаревший синтаксис и пользоваться им не стоит.

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

Статические поля и методы, константы

В отличие от обычных статические поля одинаковы для всех экземпляров класса и изменение статического свойства приведёт к его изменению для всех экземпляров класса. Обращение к статическим членам внутри класса производится при помощи ключевого слова self, а при их объявлении пишется ключевое слово static. Обращение к статическим членам извне класса производится с указанием имени класса. Для доступа к ним используется символ ‘::’. Статические методы не имеют доступ к обычным (нестатическим) членам, так как в противном случае было бы непонятно к какому экземпляру класса относятся эти нестатические члены, к которым обращается статический метод. В качестве примера можно привести статическое поле, хранящее информацию об количестве экземпляров класса. Сделаем это статическое поле недоступным извне класса при помощи спецификатора доступа private. Узнать количество экземпляров класса будет можно при помощи метода getCount.

Источники:

http://htmlweb.ru/php/php6.php
http://www.internet-technologies.ru/articles/rukovodstvo-po-oop-na-php.html
http://true-coder.ru/oop-v-php/oop-v-php-klassy-ekzemplyary-klassa-polya-metody-i-konstruktory.html

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии