Обязательно ли объявлять абстрактный класс для абстрактного метода?

У меня есть программа ниже

<?php
abstract class foo
{
abstract public function callme();
public function testing()
{
return $this->callme();
}
}
class bar extends foo
{
public function callme()
{
return "hello";
}
}

$objBar = new bar();
echo $objBar->testing();

?>

Я определил abstract class foo, Обязательно ли писать реферат перед занятием? Потому что, если я удалю абстракцию, я получу фатальную ошибку.

1

Решение

Да, если он содержит Аннотация методы.

Объявляя метод как абстрактный, вы говорите, что для использования этого класса расширяющие классы должны реализовывать абстрактный метод.

Ваш класс foo не может быть создан, если callme реализован, следовательно, он должен быть объявлен абстрактным.


Эти понятия, возможно, лучше объяснить на примере реального мира, чем ваш стандарт abstract class Vehicle, class Car extends Vehicle учебные пособия.

Допустим, у нас есть система отчетности, которая выполняет запросы к базе данных.

Мы считаем, что все отчеты должны быть реализованы стандартным способом для совместного использования кода и помощи в дальнейшем обслуживании.

Итак, мы определяем:

abstract class Report
{

}

Ради аргумента, все наши отчеты требуют подключения к базе данных.

abstract class Report
{
/** @var PDO */
protected $dbh;

public function __construct (PDO $dbh)
{
$this->dbh = $dbh;
}

/**
* @return array
*/
abstract public function getData();

}

Здесь мы также решили, что все наши отчеты должны реализовывать публичный метод getData, который возвращает массив.

Это означает:

  • Мы можем гарантировать, что все наши отчеты имеют подключение к базе данных
  • Мы можем создать экземпляр и затем запустить каждый отчет таким же образом

Определение абстрактного класса привело к тому, что мы используем этот код, и гарантирует, что каждый тип отчета, независимо от того, какой разработчик в вашей команде его написал, соответствует принятому нами соглашению.

Затем другой код может выбрать отчет из пользовательского ввода, запустить его и что-то сделать с результатом getData (например, записать его в файл CSV), зная, что это будет массив.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]