Reg.ru: домены и хостинг

Крупнейший регистратор и хостинг-провайдер в России.

Более 2 миллионов доменных имен на обслуживании.

Продвижение, почта для домена, решения для бизнеса.

Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Перейти на сайт->

Бесплатный Курс "Практика HTML5 и CSS3"

Освойте бесплатно пошаговый видеокурс

по основам адаптивной верстки

на HTML5 и CSS3 с полного нуля.

Начать->

Фреймворк Bootstrap: быстрая адаптивная вёрстка

Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.

Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.

Верстайте на заказ и получайте деньги.

Получить в подарок->

Бесплатный курс "Сайт на WordPress"

Хотите освоить CMS WordPress?

Получите уроки по дизайну и верстке сайта на WordPress.

Научитесь работать с темами и нарезать макет.

Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!

Получить в подарок->

*Наведите курсор мыши для приостановки прокрутки.


Работа с методами в объектно-ориентированном программировании на 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.

Обратите внимание на то, что при определении метода мы не включили ключевое слово, определяющее его видимость. Это означает, что метод 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 с нуля с использованием ООП:

Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!


Смотрите также:

PHP: Получение информации об объекте или классе, методах, свойствах и наследовании

PHP: Получение информации об объекте или классе, методах, свойствах и наследовании

CodeIgniter: жив или мертв?

CodeIgniter: жив или мертв?

Функции обратного вызова, анонимные функции и механизм замыканий

Функции обратного вызова, анонимные функции и механизм замыканий

Применение функции к каждому элементу массива

Применение функции к каждому элементу массива

Слияние массивов. Преобразование массива в строку

Слияние массивов. Преобразование массива в строку

Деструктор и копирование объектов с помощью метода __clone()

Деструктор и копирование объектов с помощью метода __clone()

Эволюция веб-разработчика или Почему фреймворк - это хорошо?

Эволюция веб-разработчика или Почему фреймворк - это хорошо?

Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.)

Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.)

PHP: Удаление элементов массива

PHP: Удаление элементов массива

Ключевое слово final (завершенные классы и методы в PHP)

Ключевое слово final (завершенные классы и методы в PHP)

50 классных сервисов, программ и сайтов для веб-разработчиков

50 классных сервисов, программ и сайтов для веб-разработчиков

Наверх