29 апреля 2020 PHP
Абсолютно любой предмет из нашей жизни мы можем описать по его характеристикам и состоянию, а так же воздействовать на это состояние. Например, ваш автомобиль имеет определенный цвет, марку, двигатель и т.д. Кроме того он может ехать, стоять, набирать или сбавлять скорость, его можно завести, или например, включить фары. Так же работает и объектно-ориентированный подход в программировании, он описывает какую-то сущность (объект) в данном случае автомобиль, с помощью свойств (цвет, марка, двигатель и т.д.). А так же описывает взаимодействие с состоянием объекта с помощью методов (завести, включить фары и т.д.).
Объектно-ориентированное программирование является довольно сложной темой в языке PHP. Поэтому начинающим программистам трудно понять PHP ООП, особенно если они не имеют большого опыта программирования.
Объектно-ориентированное программирование появилось в PHP 4, но оно набрало обороты с версией PHP 5. В 5-й версии объектная модель PHP была переписана, что позволило расширить возможности и повысить производительность, а также представила полную объектную модель для классов php.
Что такое объектно-ориентированное программирование?
Объектно-ориентированное программирование — это стиль программирования, основанный на концепции объектов. Это помогает разработчикам, предотвращать повторное изобретение колеса, и делает код легким в обслуживании и масштабировании.
Поначалу объектно-ориентированное программирование кажется непонятным, но когда вы углубитесь, вы поймете, что оно предназначено для упрощения программирования.
Зачем использовать объектно-ориентированное программирование?
Существуют различные преимущества использования PHP ООП по сравнению с процедурным программированием в PHP, такие как:
Повторное использование и переработка кода: допустим, вы хотите создать автомобильный объект Mercedes, а ваши друзья — автомобильный объект Audi. Вы строите свои объекты, но обнаруживаете, что оба объекта имеют много общего между Mercedes и Audi, как и количество шин. На самом деле оба автомобиля. Таким образом, вместо того, чтобы создавать эти два объекта отдельно с нуля, если у вас есть один класс автомобилей с общими свойствами и методами, вы можете сэкономить много повторений, повторно используя и перерабатывая код.
Модульность: если вы создаете несколько отдельных классов для разных сущностей, вы делаете их модульными, и если вы захотите что-то исправить, то вам нужно только отредактировать этот конкретный класс, а не другие. Эта модульность оказывается полезной при устранении неполадок.
Масштабируемость: объектно-ориентированные программы более масштабируемы, чем структурированные программы. Интерфейс объекта предоставляет всю информацию, необходимую для замены объекта, что позволяет легко заменить старый код или добавить новый код для масштабирования в будущем.
Техническое обслуживание: программы регулярно улучшаются со многими изменениями. Объектно-ориентированную программу гораздо проще модифицировать и поддерживать, чем неориентированную программу.
Понятие классов и объектов
Что такое класс и объект в PHP ООП?
Прежде чем мы углубимся в мир объектно-ориентированного программирования, давайте узнаем о классах и объектах PHP, которые являются основой парадигмы PHP OOP.
Класс — это тип данных, определенный программистом, который содержит различные типы данных, а также различные функции.
Объект является экземпляром класса. Объект получает копию всех данных и функций в классе, таким образом, он действует как независимая сущность.
Давайте разберемся с классами и объектами на примере.
Класс и объекты
Слева на приведенном выше изображении показана схема автомобиля, а справа — автомобили, созданные с использованием этой схемы, такие как Mercedes, BMW, Audi и т. д.
Таким образом, здесь, Car — это класс PHP, который действует как план и содержит свойства данных, такие как количество шин, тип автомобиля, цвет автомобиля и т. д.
А Mercedes, Audi известны как объекты, которые мы создали с помощью класса «Автомобиль».
Все объекты были созданы из одного класса, и поэтому они имеют одинаковые функции и свойства, но могут иметь разные значения своих свойств. Например, на изображении выше все автомобили имеют разные значения для своего свойства цвета — Mercedes зеленый; БМВ синий; Ауди это оранжевый.
Что такое свойство и метод?
Свойства в классе — это переменные, которые могут хранить данные разных типов данных. Метод — это функция, определенная внутри класса.
Все объекты, созданные в этом классе, получают копию этой переменной свойства и копию всех функций-членов, известных как методы.
Как создать класс и объект?
В классе мы сгруппируем код, который обрабатывает определенную тему. Таким образом, для именования класса мы должны использовать единственное существительное типа Car, которое будет обрабатывать логику об автомобилях.
Синтаксис создания класса очень прост и понятен. Вы должны использовать ключевое слово class для объявления класса, за которым следует имя класса.
- Объявите класс, используя ключевое слово class.
- Используйте существительное единственного числа и используйте первую букву.
- Если имя класса содержит более одного слова, тогда каждое слово пишется с заглавной буквы, используя написание в так называемом стиле CamelCase. Например: JapaneseCar, AmericanCar.
- Экземпляр класса — это объект, созданный из существующего класса.
- new используется для создания объекта из класса.
Теперь вы можете очень легко создать объект из класса, используя ключевое слово new.
$bmw = new Car;
Таким образом, сложив все это вместе:
Как определить свойства в классе?
Для добавления и сохранения данных в классе используются свойства или переменные-члены. Свойства могут хранить значения типов данных — строковые, целые и десятичные числа, логические значения и т. д. Они точно так же, как обычные переменные, но они связаны с экземпляром объекта, и, таким образом, вы можете получить доступ к переменной только с помощью объекта.
Давайте добавим некоторые свойства в класс Car.
- Мы использовали ключевое слово
public
перед свойством класса, чтобы определить видимость свойства, о котором мы поговорим позже. - Свойство класса может иметь значение по умолчанию. Также вы можете пропустить значение по умолчанию.
Здесь вы можете видеть, что мы добавили некоторые свойства, которые необходимы для каждого объекта автомобиля. Очевидно, что классу автомобиля нужно намного больше свойств, чем это, но для примера думаю этого достаточно.
Теперь, чтобы прочитать любое свойство, получите доступ к свойству, используя объект. Например:
echo $bmw->color;
Стрелка (->
) является конструкцией ООП, которая обращается к свойствам и методам данного объекта.
Как определить методы в классе?
Функции PHP, которые определены в классе, называются методами. Методы в ООП PHP в точности похожи на обычные функции PHP. Давайте создадим несколько методов для нашего класса автомобилей.
Здесь мы создали два метода: 1) setColor
— который назначит данный параметр свойству color
объекта и 2) getColor
— который вернет значение свойства color
объекта.
Примечание: $this
используется для ссылки на текущий объект. Вы можете получить доступ к свойствам и методам класса из класса, используя ключевое слово $this
.
Теперь, чтобы использовать эти методы, вызовите эти методы, используя стрелку «->
«. Вы должны ссылаться на соответствующие объекты, потому что каждый экземпляр объекта имеет копию этих свойств и методов.
Давайте использовать эти недавно созданные методы.
- Код для метода должен быть заключен в пару фигурных скобок.
- Вам нужно использовать одно из ключевых слов
public
,protected
илиprivate
для создания метода или свойства класса. Это ключевые слова видимости. Подробнее об этом вы узнаете позже. - Если вы не использовали одно из ключевых слов — общедоступное, защищенное или частное, то по умолчанию установлено общедоступное.
- Вы также можете получить доступ к свойствам и методам текущего экземпляра или объекта, используя
$this
ключевое слово —$this->color
.
Конструктор и деструктор
В PHP есть несколько методов, известных как магические методы. Среди них два наиболее важных магических метода — __construct
и __destruct
. Эти два метода создания конструктора и деструктора для класса. Помните, магические методы всегда начинаются с двух подчеркиваний.
Что такое конструктор и деструктор?
Метод __construct
— это метод, который вызывается классом при создании объекта. Он используется для подготовки нового объекта к использованию. Конструкторы можно использовать для назначения значений параметров свойствам объекта.
Метод __destruct
— это функция, которая вызывается классом при уничтожении объекта. Обычно используется для очистки памяти при уничтожении объекта.
Мы создадим конструктор для установки значения свойства color
.
В приведенном выше примере мы создали конструктор, который принимает один аргумент для цвета и устанавливает его для свойства цвета. Мы также изменили наш код создания объекта и передали значение для свойства color
.
Помните, что когда мы создали конструктор для переопределения конструктора PHP по умолчанию, нам нужно передать параметр конструктору.
Если вы попробуете — $bmw = new Car();
это выдаст ошибку, потому что наш конструктор ожидает один параметр.
Теперь мы создадим деструктор, который будет печатать сообщение при уничтожении объекта.
- Метод конструктора — это специальный магический метод, представленный в PHP 5, который позволяет инициализировать свойства объекта или выполнять некоторые действия во время создания объекта.
- Метод деструктора — это особый магический метод, который позволяет выполнять некоторые действия во время разрушения объекта.
- Классы, имеющие метод конструктора, выполняются автоматически при создании или создании объекта.
- Классы, которые имеют метод деструктора, выполняются автоматически при уничтожении объекта.
- Конструктор и деструктор не требуются. Каждый класс PHP имеет конструктор и деструктор по умолчанию. Если вы создаете конструктор или деструктор, он по умолчанию игнорируется автоматически.
- PHP выполняет только один конструктор и один деструктор.
- Метод
__construct
и__destruct
начинается с двух подчеркиваний.
Назначение видимости в PHP
Ранее мы обсуждали использование одного из ключевых слов — public
, private
и protected
при определении свойства или метода. Public
, Protected
и Private
— это три типа видимости в PHP для управления доступом к свойствам, переменным или методам.
Public: открытый метод или переменная доступны везде.
Private: если переменная свойства или метод являются приватными, тогда они доступны только внутри класса. Например: если свойство color
класса Car
является приватным, то вы не можете получить к нему доступ вне класса, как — echo $bmw->color;
но такой метод, как getColor
, может получить к нему доступ, потому что он находится внутри класса.
Protected: если переменная свойства или метод защищены, то они доступны изнутри класса или из любого класса, унаследованного от этого класса.
Почему мы не должны использовать публичную видимость все время?
Потому что не все безопасно держать все в открытом доступе. Чтобы сделать его безопасным, PHP OOP представил эти различные возможности.
Давайте обсудим пример, показывающий важность приватной или защищенной видимости в ООП PHP:
Внесите изменения в наш код класса автомобиля, как показано ниже:
Как показано в приведенном выше коде, мы сделали свойства private
, чтобы скрыть их от внешнего мира. Таким образом, если кто-то попытается получить доступ к свойству color
, используя $bmw->color
, это выдаст ошибку.
И именно поэтому мы создали два метода getColor
и setColor
, которые также известны как методы получения и установки, потому что они действуют как посредник между внешним миром и частной переменной.
Поэтому, если вы хотите получить значение цвета, используйте $bmw-> getColor()
, а если вы хотите установить значение цвета, используйте $bmw->setColor("Белый")
. Это известно как инкапсуляция.
Статические свойства и методы
Статический метод или свойство могут быть доступны без необходимости создания объекта-экземпляра. Просто используйте имя класса, оператор разрешения области видимости и имя свойства или метода.
Мы уже изучили три модификатора — private
, protected
и public
. Static
— это четвертый модификатор доступа в PHP OOP, который позволяет получить доступ к свойствам и методам без необходимости создавать объекты из классов.
Как создать статическое свойство и метод
Чтобы определить методы и свойства как статические, вам нужно использовать зарезервированное ключевое слово static
.
Давайте посмотрим на это в нашем примере:
Здесь я определил постоянное название страны со значением Канада. Теперь мне не нужен объект для доступа к этой константе.
Чтобы использовать статический метод и свойства в классе, используйте self
.
Заключение
PHP ООП дает много преимуществ по сравнению с процедурным программированием и обеспечивает более простой подход к созданию сложных веб-приложений с более легкой масштабируемостью.
Теперь вы знакомы со стилем объектно-ориентированного программирования, и у вас должно быть четкое понимание основных концепций PHP ООП, т.е. объектно-ориентированного программирования.
Надеюсь, вам понравился этот урок о ООП в PHP. А если у вас есть вопросы или вы запутались, то задавайте вопросы в комментариях ниже.