Продолжаем изучение PHP, создаем свои первые методы (функции).
Как написать метод для объекта PHP ООП
Пред. часть:
PHP — Основы ООП. Создаем Класс, Объект и его свойства. Часть 1
Вы уже знаете про переменные, напишем в начале нашего класса такие:
class Car { // переменные объекта public $brand; public $color; public $maxSpeed; public $currentSpeed = 0; ...
Если это необходимо, задаем значения по умолчанию, например $currentSpeed = 0. Напишем пару методов:
.. // методы объекта public function move($speed = 60) { $this->currentSpeed = $speed; } public function stop() { $this->currentSpeed = 0; } ..
Методы – это функции, которые доступны внутри объекта. С их помощью можно изменять “свойства” объекта. $this->currentSpeed = $speed; – яркий тому пример. $this – указывает на текущий объект, является ссылкой.
PHP – как в классе написать свой конструктор и деструктор
Рассмотрим конструктор и деструктор.
// конструктор public function __construct($brand = 'default', $color = 'red', $maxSpeed = 100) { $this->brand = $brand; $this->color = $color; $this->maxSpeed = $maxSpeed; $this->move(50); } // деструктор public function __destruct() { $this->stop(); }
Именно так они записываются в PHP. Теперь давайте разбираться по порядку. При каждом создании нового объекта у нас вызывается конструктор. В нашем случае, мы передаем 3 переменных – бренд, цвет и максимальную скорость. Также, вызываем метод move() и передаем в него число 50 – это новое значение для $currentSpeed.
Наша запись в index.php (про это в 1ой части):
$carBmw = new Car(‘bmw’, ‘red’, 240);
Распечатав наш объект:
Car Object ( [brand] => bmw [color] => red [maxSpeed] => 240 [currentSpeed] => 50 )
Деструктор – будет вызван при освобождении всех ссылок на определенный объект или при завершении скрипта (порядок выполнения деструкторов не гарантируется). В нашем случае, он вызываем метод stop(), и наша скорость становится равной 0. Эта штука очень редко где используется, но про нее нужно знать.
Полный код сейчас выглядит так:
class Car { // переменные объекта public $brand; public $color; public $maxSpeed; public $currentSpeed = 0; // конструктор public function __construct($brand = 'default', $color = 'red', $maxSpeed = 100) { $this->brand = $brand; $this->color = $color; $this->maxSpeed = $maxSpeed; $this->move(50); } // деструктор public function __destruct() { $this->stop(); } // методы объекта public function move($speed = 60) { $this->currentSpeed = $speed; } public function stop() { $this->currentSpeed = 0; } }
Вот мы и познакомились с объектами. Ждите следующую часть, пишите комментарии 🙂
Замечание : Конструкторы, определенные в классах-родителях не вызываются автоматически, если дочерний класс определяет собственный конструктор. Чтобы вызвать конструктор, объявленный в родительском классе, требуется вызвать parent::__construct() внутри конструктора дочернего класса. Если в дочернем классе не определен конструктор, то он может быть унаследован от родительского класса как обычный метод (если он не был определен как приватный). В целях обратной совместимости, если PHP 5 не может обнаружить объявленный метод __construct(), то вызов конструктора произойдет по устаревшей схеме, через обращение к методу, имя которого соответствует имени класса. Может возникнуть только одна проблема совместимости старого кода, если в нём присутствуют классы с методами __construct(), использующиеся для других целей.
Спасибо за конструктивный комментарий!