Абстрактный класс PHP
Абстрактные классы и методы были введены в PHP 5. Основное различие между абстрактным и обычным классом заключается в том, что мы не можем создавать объекты из абстрактного класса. В таком случае возникает вопрос, какова польза от такого класса? Абстрактный класс может быть унаследован, затем в производном классе определяются методы и в нем используются.
Абстрактные методы не содержат никакого определения их реализации. Проще говоря, вы не должны писать код для метода, это просто объявление. Если в классе есть один метод, являющийся абстрактным, класс должен быть объявлен, как абстрактный. Абстрактный класс PHP ООП также может содержать абстрактные методы.
Когда класс наследуется от абстрактного класса, необходимо, чтобы все методы, объявленные как абстрактные в родительском классе, были определены в производном классе с тем же модификатором доступа. Если метод определен в абстрактном суперклассе как protected, то в производном классе он должен быть protected или public, но не private. Методы должны быть одинаковыми по именам и аргументам.
Пример абстрактного класса:
<?php
abstract class Vehicle {
public abstract function getnoofWheel();
public function getName() {
return get_class($this);
}
}
class Bus extends Vehicle {
public function getnoofWheel() {
return 4;
}
}
class Bicycle extends Vehicle {
public function getnoofWheel() {
return 2;
}
}
function printNumWheels(Vehicle $v) {
echo "A " . $v->getName() . " has " . $v->getnoofWheels() . " wheelsn";
}
$Bus1 = new Bus();
$Bicycle1 = new Bicycle();
printNumWheels($Bus1);
printNumWheels($Bicycle1);
/***Результат приведенного выше кода будет следующим***/
A Bus has 4 wheels
A Bicycle has 2 wheels
В приведенном выше ООП PHP примере мы сначала объявили абстрактный класс Vehicle, он содержит один абстрактный метод getnoofWheel. Этот метод является лишь объявлением и не содержит никакого кода. Этот класс также содержит обычный (неабстрактный) метод getName, который возвращает имя данного класса. После этого мы объявили класс Bus, который наследуется от класса Vehicle.
В классе Bus мы определили функцию getnoofWheel. Точно так же расширяется другой класс Bicycle, и в нем определяется абстрактный метод. Из классов Vehicle и Bicycle создаются объекты, и мы используем функцию для вывода количества колес транспортных средств. Этот пример наглядно иллюстрирует использование абстрактного класса в PHP 5 ООП и его реализацию.