PHP — Основы ООП. Создаем Методы, Конструктор и деструктор. Часть 2

Продолжаем изучение 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;
	}
}

Вот мы и познакомились с объектами. Ждите следующую часть, пишите комментарии 🙂

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

2 коментаря

  1. Замечание : Конструкторы, определенные в классах-родителях не вызываются автоматически, если дочерний класс определяет собственный конструктор. Чтобы вызвать конструктор, объявленный в родительском классе, требуется вызвать parent::__construct() внутри конструктора дочернего класса. Если в дочернем классе не определен конструктор, то он может быть унаследован от родительского класса как обычный метод (если он не был определен как приватный). В целях обратной совместимости, если PHP 5 не может обнаружить объявленный метод __construct(), то вызов конструктора произойдет по устаревшей схеме, через обращение к методу, имя которого соответствует имени класса. Может возникнуть только одна проблема совместимости старого кода, если в нём присутствуют классы с методами __construct(), использующиеся для других целей.

Залишити відповідь