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 ...

我尝试做的是:抽象类数据库有一个受保护的$value,我想创建一个包装类,以便能够(暂时(更改受保护的值。

我该怎么做?

编辑1:不幸的是,早些时候,当我在没有抽象my_database的情况下尝试时,我得到了错误:

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

编辑2:从my_database中完全取出抽象单词后,我得到以下错误:

致命错误:类 my_database 包含 32 个抽象方法,必须 因此被声明为抽象或实现其余方法

我该如何解决这个问题?

定义为

抽象的类不能实例化,任何包含至少一个抽象方法的类也必须是抽象的。您可以在PHP的文档中阅读有关此内容的内容:链接

下面是一个示例。

有一个抽象类(注意抽象方法没有 body - 它们不能有 body - 它只是一个签名(:

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;

你的类不应该是抽象的:

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

在 OOP 中,抽象类不能被实例化,因为它可以扩展。

最新更新