我想为CRUDable(可以保存和删除)的实体创建一个接口。这是我的抽象类:
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中遇到了一些处理身份验证令牌的代码。课程UsernamePasswordToken
扩展AbstractToken
,__construct()
方法中有一组不同的参数:AbstractToken::__construct()
与UsernamePasswordToken::__construct()
。
我的问题是Symfony是如何做到这一点的?这与我的代码有什么区别?
答案 0 :(得分:8)
重写构造函数是special case:
与其他方法不同,当使用与父
E_STRICT
方法不同的参数覆盖__construct()
时,PHP不会生成__construct()
级错误消息。
你可以不用其他方法做到这一点。
答案 1 :(得分:0)
您的子方法必须与抽象父类中的抽象方法具有相同数量的参数。
你的例子中的构造函数不是抽象的 - 孩子只是覆盖它。