Объектно-ориентированное программирование на PHP
Объектно-ориентированное программирование (ООП) – это методология (способ, подход) программирования согласно которой программный продукт представляется в виде взаимодействующих объектов.
Под объектом обычно понимается некая именованная сущность, хранящая в себе данные и имеющая своё собственное поведение. Поведение объекта и структуру данных, которые он хранит, а также способы доступа к этим данным, описывает класс, к которому этот объект принадлежит. Класс - это описание чем-то похожих, родственных объектов, которые обычно хранят одинаковый набор данных и имеют одинаковое поведение. Объект, который принадлежит какому-то конкретному классу, называют его экземпляром.
Три принципа ООП
ООП основано на трёх принципах, это:
- инкапсуляция
- полиморфизм
- наследование
Инкапсуляция – это принцип, согласно которому данные объединяются и хранятся в объектах, а также защищаются от неверного использования.
Наследование – это процесс приобретения одним типом объектов (классом) некоторых свойств другого типа объектов.
Полиморфизм – это использование одного и того же имени метода для решения нескольких похожих задач.
Оглавление
МОДУЛЬ 1. 3
1 Классы и объекты в PHP. 3
2 Конструкторы и Деструкторы.. 6
3 Явное клонирование объекта. 7
4 Наследование и полиморфизм классов в PHP. 9
5 Перегрузка методов. 10
6 Обращение к полям и методам класса-предка. 11
7 Обработка исключительных ситуаций (исключений). 12
8 Константы класса. 14
МОДУЛЬ 2. 15
9 Абстрактные методы и классы.. 15
10 Интерфейсы.. 16
11 Статические свойства и методы класса. 18
12 Оператор instanceof. 19
13 Метод __toString(). 20
|
14 Функция _autoload(). 20
МОДУЛЬ 3. 22
МОДУЛЬ 1
1 Классы и объекты в PHP
Класс - это базовое понятие в ООП. Классы образуют синтаксическую базу ООП. Их можно рассматривать как своего рода "контейнеры" для логически связанных данных и функций (обычно называемых методами).
Экземпляр класса - это объект. Объект - это совокупность данных (свойств) и функций (методов) для их обработки. Свойства и методы называются членами класса. Вообще, объектом является все то, что поддерживает инкапсуляцию.
Если класс можно рассматривать как тип данных, то объект — как переменную (по аналогии). Скрипт может одновременно работать с несколькими объектами одного класса, как с несколькими переменными.
Описание классов в PHP начинаются служебным словом class. После него следует имя класса. Именовать классы принято с большой буквы. После имени класса в фигурных скобках следует описание членов класса – его полей (данных) и методов.
class Имя_класса {
// описание членов класса - свойств и методов для их обработки
}
Для объявления объекта необходимо использовать оператор new:
Объект = new Имя_класса;
При описании полей (методов) класса нужно указывать спецификатор доступа – ключевое слово, которое будет определять область видимости поля, к которому оно относится. В php есть три спецификатора доступа: public, protected, private. Спецификатор public обеспечивает доступ к полю из любого места, protected – только из классов стоящих в той же цепочке наследования (из класса-потомка, из потомка потомка и т.д.), private запрещает доступ ото всюду, кроме самого класса. После спецификатора доступа идёт имя поля, предварённое знаком доллара.
|
Метод описывается так же, как и обыкновенная пользовательская функция. Методу также можно передавать параметры. Описания метода в классе, как и описание поля, начинается со спецификатора доступа, затем следует ключевое слово function, имя метода и список параметров в круглых скобках.
Пример:
Доступ к полям класса
Для доступа к полям класса используется символ '->'. Имя поля, к которому мы хотим обратиться пишется без знака доллара. Значение полей класса по умолчанию можно установить прямо при объявлении любым литеральным (явно указанным) значением. При объявлении нельзя присвоить полю класса результат работы функции, за исключением array(), или экземпляр класса. Подобный приём считается дурным тоном, поскольку объявляя поля в классе, мы сообщаем, какие данные будут храниться в экземплярах этого класса. Для динамически определяемых свойств мы не можем гарантировать их наличие в экземпляре. Чтобы получить доступ к членам класса внутри класса, необходимо использовать указатель $this, который всегда относится к текущему объекту (которое, в отличие от многих других языков программирования, в PHP пишется со знаком доллара).
Пример:
Доступ к методам класса
Указатель $this можно также использовать для доступа к методам, а не только для доступа к данным:
Внутри метода доступ к текущему экземпляру класса можно получить при помощи ключевого слова $this. За пределами класса вызов методов производится с указанием имени экземпляра класса. Как и для доступа к полям, для вызова методов используется символ '->'.
|
Пример:
Пример:
Задание 1
1. Создайте класс User со свойствами name, login и password;
2. Создайте три объекта, экземпляра класса User;
3. Задайте произвольные значения свойств name, login и password для каждого из объектов;
4. В классе User опишите методы setName и getName, позволяющие установить и получить значение соответствующего поля name;
5. Вызовите метод showInfo() для одного из объектов;
6. В классе User опишите метод showInfo();
7. Метод showInfo() должен выводить значения свойств объектов;
8. Вызовите метод showInfo() для каждого объекта;
9. Модифицируйте метод showInfo() – который в качестве параметра принимает разделитель между выводом полей объекта класса (по умолчанию – переход на новую строку);
10. Вызовите метод showInfo() для каждого объекта с разными разделителями;
Результат работы:
Конструкторы и Деструкторы
Для того, чтобы присвоить полям значения при создании экземпляра класса существуют конструкторы. Конструктор у класса в php может быть только один и если он не объявлен, то значения экземпляра остаются равными значениям по умолчанию. При объявлении конструктора указывается пишется ключевое слово function и __construct. По умолчанию спецификатор доступа – public и его можно опустить. Конструктор, как и метод, имеет доступ ко всем полям класса через ключевое слово $this. Можно рассматривать конструктор как метод, который вызывается при создании экземпляра класса.
В старых версиях php имя конструктора должно было совпадать с именем класcа, что на сегодняшний день является устаревшим синтаксисом.
Необходимость в вызове деструкторов возникает лишь при работе с объектами, использующими большой объем ресурсов, поскольку все переменные и объекты автоматически уничтожаются по завершении сценария. При объявлении деструктора указывается ключевое слово function и __construct. Деструктор будет вызван при освобождении всех ссылок на определенный объект или при завершении скрипта. Деструктор будет вызван даже в том случае, если скрипт был остановлен с помощью функции exit(). Вызов exit() в деструкторе предотвратит запуск всех последующих функций завершения.
Пример:
Интересная подробность: в зависимости от количества передаваемых параметров могут вызываться разные конструкторы (например, отдельно для создания объекта и для инициализации полей).
Задание 2
1. В классе User опишите конструктор;
2. Конструктор должен задавать начальные значения свойств name, login и password;
3. Создайте заново три объекта, экземпляра класса User;
4. Опишите деструктор в классе User.