4

我想为可增删改查的实体创建一个接口(可以保存和删除)。这是我的抽象类:

abstract class AbstractCrudableEntity extends AbstractEntity
{
    abstract public function doSave();
    abstract public function doDelete();
}

我的实现类需要这些方法的几个额外参数。这是实现类的签名:

class Contact extends AbstractCrudableEntity {
    public function doSave(User $user, \UberClientManager $manager);
    public function doDelete(User $user, \UberClientManager $manager);
}

我了解 PHP 要求实现类具有与父类相同的方法参数(有几个问题可以回答这个问题:例如this)。所以这不是问题。

然而,我最近在 Symfony 中遇到了一些处理身份验证令牌的代码。类UsernamePasswordTokenextends AbstractToken,并且在方法中有一组不同的参数__construct()AbstractToken::__construct()UsernamePasswordToken::__construct().

我的问题是 Symfony 是如何做到这一点的?这和我的代码有什么区别?

4

2 回答 2

8

重写构造函数是一种特殊情况

与其他方法不同,当使用与父方法不同的参数覆盖时,PHP 不会生成E_STRICT级别错误消息。__construct()__construct()

不能用其他方法做到这一点。

于 2012-10-31T12:47:52.973 回答
0

您的子方法必须具有与抽象父类中的抽象方法相同数量的参数。

您示例中的构造函数不是抽象的 - 孩子只是覆盖它。

于 2012-10-31T12:48:24.313 回答