У меня есть программа ниже
<?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
, Обязательно ли писать реферат перед занятием? Потому что, если я удалю абстракцию, я получу фатальную ошибку.
Да, если он содержит Аннотация методы.
Объявляя метод как абстрактный, вы говорите, что для использования этого класса расширяющие классы должны реализовывать абстрактный метод.
Ваш класс 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), зная, что это будет массив.
Других решений пока нет …