Цепочки методов и свойств в PHP
В предыдущем уроке мы научились использовать ключевое слово $this для доступа к свойствам и методам в рамках класса. В этом уроке мы узнаем, что, когда методы класса возвращают ключевое слово $this, их можно объединить в цепочку, чтобы создать гораздо больше потокового кода.
Цепочки методов и свойств
Перед нами стоит задача — сколько топлива осталось у нас в баке? Количество топлива в баке зависит от количества километров, которые мы проехали в нашей машине, а также от количества топлива, которое мы залили в бак.
Чтобы достичь нашей цели, мы собираемся поместить в наш класс Car
публичное свойство $tank
(бак), которое представляет количество литров топлива в баке автомобиля.
class Car { public $tank; }
Мы также должны добавить два метода в наш класс Car:
- Метод fill() добавляет литры топлива в бак нашей машины.
- Метод ride() вычисляет, сколько топлива мы потребляем, проезжая определенное расстояние, а затем вычитает его из бака. В нашем примере мы предполагаем, что автомобиль потребляет 1 литр топлива каждые 10 километров.
Пример
<?php
class Car {
public $tank;
// Добавьте литры топлива в бак, когда мы его заправим
public function fill($float) {
$this-> tank += $float;
}
// Вычтите галлоны топлива из бака, пока мы едем на машине
public function ride($float) {
$kms = $float;
$litrs = $kms/10;
$this-> tank -= $litrs;
}
}
?>
Поскольку мы хотим, чтобы наш код выглядел элегантно, мы объединим методы и свойства в цепочку. Обратите внимание на стрелки в коде.
$tank = $car -> fill(10) -> ride(40) -> tank;
Словами: сколько топлива у нас осталось в баке после того, как залили 10 литров и проехали 40 км?
Чтобы мы могли выполнить цепочку, методы должны возвращать объект, и, поскольку мы находимся внутри класса, методы должны возвращать ключевое слово $this
.
В приведенном ниже коде мы видим, как каждый метод возвращает ключевое слово $this, чтобы разрешить цепочку:
Пример
<?php
class Car {
public $tank;
// Добавьте литры топлива в бак, когда мы его заправим
public function fill($float)
{
$this-> tank += $float;
return $this;
}
// Вычтите галлоны топлива из бака, пока мы едем на машине
public function ride($float)
{
$kms = $float;
$litrs = $kms/10;
$this-> tank -= ($litrs);
return $this;
}
}
?>
Теперь мы можем создать объект из класса Car с именем $bmw и узнать количество литров топлива, оставшегося в баке нашей машины после того, как мы залили бак 10 литров топлива и проехали 40 км:
Пример
<?php
// Создайте новый объект из класса Car
$bmw = new Car();
// Добавьте 10 л топлива, затем проехав 40 км,
// и получаем количество галлонов в баке.
$tank = $bmw -> fill(10) -> ride(40) -> tank;
// Вывести результаты на экране
echo "Количество литров, оставшихся в баке: " . $tank;
?>
Приведем весь код:
Пример
Попробуй сам »<?php
class Car {
public $tank;
// Добавьте литры топлива в бак, когда мы его заправим
public function fill($float) {
$this-> tank += $float;
return $this;
}
// Вычтите галлоны топлива из бака, пока мы едем на машине
public function ride($float) {
$kms = $float;
$litrs = $kms/10;
$this-> tank -= ($litrs);
return $this;
}
}
// Создайте новый объект из класса Car
$bmw = new Car();
// Добавьте 10 л топлива, затем проехав 40 км,
// и получаем количество галлонов в баке.
$tank = $bmw -> fill(10) -> ride(40) -> tank;
// Вывести результаты на экране
echo "Количество литров, оставшихся в баке: " . $tank;
?>
Результат выполнения кода:
Заключение
В этом уроке вы узнали, что можно связать свойства и методы, чтобы обеспечить плавный код и улучшить его читаемость. Кликните здесь, чтобы попрактиковаться в этой теме.