PHP:有些人通过在体内专门抛出异常来"伪造"抽象方法的原因是什么?

Foo*_*bar 5 php exception abstract symfony

最近我经常看到如下代码(这个例子来自Symfony):

protected function execute(InputInterface $input, OutputInterface $output)
{
    throw new LogicException('You must override the execute() method in the concrete command class.');
}
Run Code Online (Sandbox Code Playgroud)

将标记方法标记为什么有什么好处abstract

对...有什么好处?

  1. ...图书馆作者?
  2. ...图书馆用户?

我已经在Java中找到了一个类似的问题(伪造抽象方法在Java中使用异常),但由于它的答案是明确的猜测和观点,所以它不是很有帮助.

Phi*_*der 0

只有抽象类才能有抽象方法。

您无法从抽象类创建对象。

所有抽象方法都必须在非抽象类中实现。

构造示例:

想象一下以下情况:

abstract class Repository {
    public abstract function read();
    public abstract function write($object);
    public abstract function delete($object);
    public function connection() {
        //this is implemented for you by the framework so you don't have to do it every time
    }
Run Code Online (Sandbox Code Playgroud)

现在您想要实现一个用于记录用户操作(登录、注销等)的存储库

您不希望删除任何这些条目,并且此时您不想实现该delete功能。但你必须这样做,因为你的UserActionRepository不是抽象的,因为你实际上需要它的实例。那就是你抛出异常的时候。