Работа с методами в объектно-ориентированном программировании на PHP
Перед изучением данной статьи вы можете прочитать предыдущую статью из этой серии - "Классы и объекты в PHP, определение свойств в классе".
Так же, как свойства позволяют объектам сохранять данные, методы позволяют объектам выполнять задачи.
Методы (methods) - это специальные функции, которые объявляются внутри класса. Как и можно было ожидать, объявление метода напоминает объявление функции. За ключевым словом function следует имя метода, а за ним - необязательный список переменных-аргументов в круглых скобках.
Тело метода заключается в фигурные скобки:
public function myMethod ($argument, $another) { // ... }
В отличие от функций, методы необходимо объявлять в теле класса. При этом также можно указывать ряд спецификаторов, включая ключевое слово, определяющее видимость метода.
Как и свойства, методы можно определять как public, protected или private. Объявляя метод как public, мы тем самым обеспечиваем возможность его вызова извне текущего объекта.
Если в определении метода вы опустите ключевое слово, определяющее видимость, то метод будет объявлен неявно как public. К модификаторам методов мы вернемся несколько позже.
В большинстве случаев метод вызывают с помощью объектной переменной, за которой указываются символы "->" и имя метода. При вызове метода нужно использовать круглые скобки, так же как при вызове функции (даже если методу не передаются никакие аргументы).
$myObj = mew MyClass(); $myObj->myMethod("Михаил", "Булгаков");
Давайте добавим методы к определенному ранее классу ShopProduct.
class ShopProduct { public $title ="Стандартный товар"; public $producerMainName ="Фамилия автора"; public $producerFirstName ="Имя автора"; public $price = 0; function getProducer() { return "{$this->producerFirstName}". " {$this->producerMainName}"; } } $product1 = new ShopProduct(); $product1->title="Собачье сердце"; $product1->producerMainName ="Булгаков"; $product1->producerFirstName="Михаил"; $product1->price = 5.99; print "Автор: ".$product1->getProducer()."\n";
В результате на выходе получим следующее:
Автор: Михаил Булгаков
Мы добавили метод getProducer() к классу ShopProduct.
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
Обратите внимание на то, что при определении метода мы не включили ключевое слово, определяющее его видимость. Это означает, что метод getProducer() относится к типу public и его можно вызвать из-за пределов класса.
При определении метода getProducer() мы воспользовались новой возможностью - псевдопеременной $this. Она представляет собой механизм, посредством которого класс может обратиться к экземпляру объекта.
Если вы считаете, что это трудно для понимания, попробуйте заменить $this "текущим экземпляром объекта". Тогда оператор
$this->producerFirstName
превратится в
Свойство $producerFirstName текущего экземпляра объекта.
Так, метод getProducer() объединяет и возвращает значения свойств $producerFirstName и $producerMainName, избавляя нас от неприятной работы всякий раз, когда нужно вывести полное имя автора.
Итак, нам удалось немного улучшить наш класс. Но для него по-прежнему характера слишком большая "гибкость". Мы полагаемся на то, что программист будет изменять стандартные значения свойств объекта ShopProduct. Но это проблематично в двух отношениях.
Во-первых, нужно пять строк кода, чтобы должным образом инициализировать объект типа ShopProduct, и ни один программист вам не скажет за это спасибо.
Во-вторых, у нас нет способа гарантировать, что какое-либо свойство будет определено при инициализации объекта ShopProduct.
Поэтому нам нужен метод, который будет вызваться автоматически при создании экземпляра объекта на основе класса.
Создание метода конструктора
Метод конструктора вызывается при создании объекта. Его можно использовать, чтобы все настроить, обеспечить определение необходимых свойств и выполнить всю необходимую предварительную работу.
Метод конструктора называется __construct(). Обратите внимание на то, что имя метода начинается с двух символов подчеркивания. Это правило наименования действует для многих других специальных методов в PHP-классах. Давайте определим конструктор для класса ShopProduct.
class ShopProduct { public $title ="Стандартный товар"; public $producerMainName ="Фамилия автора"; public $producerFirstName ="Имя автора"; public $price = 0; function __construct ($title, $firstName, $mainName, $price) { $this->title = $title; $this->producerFirstName = $firstName; $this->producerMainName = $mainName; $this->price = $price; } function getProducer() { return "{$this->producerFirstName}". " {$this->producerMainName}"; } }
И снова мы добавляем к классу функциональность, стараясь сэкономить время и силы программиста и избавить его от необходимости дублирования кода, работающего с этим классом.
Метод __construct() вызывается, когда создается объект с помощью оператора new.
$product1 = new ShopProduct ("Собачье сердце", "Михаил", "Булгаков", 5.99); print "Автор: {$product1->getProducer()}\n";
В результате получаем следующее.
Автор: Михаил Булгаков
Значения всех перечисленных аргументов передаются конструктору. Так, в нашем примере мы передаем конструктору название произведения, имя и фамилию автора, а также цену.
В методе конструктора используется псевдопеременная $this для присвоения значений соответствующим свойствам объекта.
— Разгрузит мастера, специалиста или компанию;
— Позволит гибко управлять расписанием и загрузкой;
— Разошлет оповещения о новых услугах или акциях;
— Позволит принять оплату на карту/кошелек/счет;
— Позволит записываться на групповые и персональные посещения;
— Поможет получить от клиента отзывы о визите к вам;
— Включает в себя сервис чаевых.
Для новых пользователей первый месяц бесплатно. Зарегистрироваться в сервисе
Теперь стало безопаснее использовать объект ShopProduct и легче создавать экземпляры на основе его класса. Создание экземпляров и определение значений свойств выполняются в одном операторе. При написании любого кода, в котором используется объект ShopProduct, можно быть уверенным, что все свойства этого объекта будут инициализированы.
Очень важным аспектом объектно-ориентированного программирования является предсказуемость. Вы должны так разрабатывать классы, чтобы пользователи объектов могли легко догадаться об их функциональных возможностях.
Кроме того, при использовании объекта вы должны быть уверены в его типе. В следующей статье "Определение типов объектов в объектно-ориентированном программировании на PHP" мы изучим механизм, который можно использовать для явного определения типов объектов при объявлении методов.
P.S. Наверное, вы интересуетесь PHP и ООП?) Обратите внимание на премиум-уроки по различным аспектам сайтостроения, включая программирование на PHP, а также на бесплатный курс по созданию своей CMS-системы на PHP с нуля с использованием ООП:
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!
Смотрите также: