PHP: фатальная ошибка: невозможно создать экземпляр абстрактного класса

У меня есть абстрактный класс базы данных с именем как:

abstract class database {
protected $value;
}

Я создал еще один абстрактный класс

abstract class my_database extends database {
public function set_value($value) {
$this->value = $value;
}
}

Когда я пытаюсь использовать это:

$my_db = new my_database();

Я получаю ошибку:

Fatal error: Cannot instantiate abstract class my_database in ...

Я пытаюсь сделать следующее: база данных абстрактных классов имеет защищенное значение $, и я хотел бы создать класс-обертку, чтобы иметь возможность изменять защищенное значение (временно).

Как я могу это сделать?

EDIT1: к сожалению ранее, когда я попытался без абстрактной my_database, я получил ошибки:

- abstract methods and must therefore be declared abstract or implemented
- Abstract function cannot contain body

EDIT2:
После полного удаления абстрактного слова из my_database я получил следующую ошибку:

Неустранимая ошибка: класс my_database содержит 32 абстрактных метода и должен
поэтому быть объявленным абстрактным или реализовать оставшиеся методы

Как я могу это исправить?

8

Решение

Классы, определенные как абстрактные, не могут быть созданы, и любой класс, который содержит хотя бы один абстрактный метод, также должен быть абстрактным. Вы можете прочитать об этом в документации PHP здесь: ссылка на сайт

Вот пример.

Есть абстрактный класс (обратите внимание, что абстрактные методы не имеют тела — они не могут иметь тело — это просто подпись):

abstract class AbstractClass
{
// Force Extending class to define this method
abstract protected function getValue();
abstract protected function prefixValue($prefix);

// Common method. It will be available for all children - they don't have to declare it again.
public function printOut() {
print $this->getValue() . "\n";
}
}

Расширьте свой абстрактный класс таким классом (обратите внимание, что все абстрактные методы ДОЛЖНЫ быть определены в конкретном классе):

class ConcreteClass1 extends AbstractClass
{
protected function getValue() {
return "ConcreteClass1";
}

public function prefixValue($prefix) {
return "{$prefix}ConcreteClass1";
}
}

Затем вы можете создать экземпляр ConcreteClass1:

$class1 = new ConcreteClass1;
12

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

Ваш класс не должен быть абстрактным:

class my_database extends database {
public function set_value($value) {
$this->value = $value;
}
}

В ООП абстрактный класс не может быть создан, но может быть расширен.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector