Абстрактные классы в php
Абстрактные классы в PHP — это классы, объекты которых нельзя создать напрямую, а только через наследников
Абстрактные классы
php поддерживает определение абстрактных классов и методов
На основе абстрактного класса нельзя создавать объекты
Любой класс, содержащий хотябы один абстрактный метод, должен быть определен как абстрактный
Методы объявленные как абстрактные несут лишь описательный смысл и не могут включать реализацию
При наследовании от абстрактного класса, все методы помеченные абстрактными в родительском классе, должны быть определены в дочернем классе и сдедовать обычным правилам наследования и совместимости сигнатуры
abstract class AbstractClass
{
#Методы которые должны быть определены в дочернем классе
abstract protected function getValue();
abstract protected function prefixValue($prefix);
#Общий метод
public function printOut() {
print $this->getValue() . "<br>";
}
}
class ConcreteClass1 extends AbstractClass
{
protected function getValue()
{
return "ConreteClass1";
}
public function prefixValue($prifix)
{
return "{$prefix}ConcreteClass1";
}
}
class ConcreteClass2 extends AbstractClass
{
public function getValue() {
return "ConcreteClass2";
}
public function prefixValue($prefix) {
return "{$prefix}ConcreteClass2";
}
}
#$class = new AbstractClass(); # На основе абстрактного класса нельзя создавать объекты
$class1 = new ConcreteClass1();
$class2 = new ConcreteClass2();
$class1->printOut();
$class2->printOut();
echo $class1->prefixValue("FOO_");
echo $class2->prefixValue("FOO_");
abstract class AbstractClass
{
abstract protected function prefixName($name);
}
#дочерний класс может определить необязательные аргументы, не указанные в объявлении родительского метода
class ConcreteClass extends AbstractClass
{
public function prefixName($name, $separator = ".")
{
if ($name == "Pacman") {
$prefix = "Mr";
} elseif ($name == "Pacwoman") {
$prefix = "Mrs";
} else {
$prefix = "";
}
return "{$prefix}{$separator} {$name}";
}
}
$class = new ConcreteClass();
echo $class->prefixName("Pacman");
echo $class->prefixName("Mrs", "-");
Источники
Последнее изменение: 19.11.2024 02:05
Связанные темы
Оператор разрешения видимости в php
Позднее статическое связывание
Методы создания экземпляра класса в php
Автоматическая загрузка классов
Наследование с помощью extends в php
Конструкторы и деструкторы в php
Добавлять комментарии могут только авторизованные пользователи