对象作为类方法中的默认参数值

时间:2013-12-27 19:33:26

标签: php oop

现在我有了这个:

abstract class PermissionModelAbstract implements PermissionModelInterface
{
    public function setDataValidator(string $action, string $method, DataPermissionValidatorInterface $validator = null)
    {
        if (is_null($validator)) {
            $validator = new DefaultDataValidator();
        }
        $this->model[$action . '/' . $method]['validator'] = $validator;
    }
}

我希望有类似的东西:

abstract class PermissionModelAbstract implements PermissionModelInterface
{
    public function setDataValidator(string $action, string $method, DataPermissionValidatorInterface $validator = new DefaultDataValidator())
    {
        $this->model[$action . '/' . $method]['validator'] = $validator;
    }
}

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

我完全放弃了在方法中调用new。它引入了紧耦合,并期望在没有实际setFoo()的情况下调用foo setter是奇怪的。

保持签名中的类型检查:

public function setDataValidator(string $action, string $method, DataPermissionValidatorInterface $validator);

然后在调用方法时简单地提供“手动”依赖:

myPermissionModel->setDataValidator('foo', 'bar', new DataPermissonValidator());

答案 1 :(得分:0)

没有其他办法,AFAIK。

如果您有很多依赖关系,维护起来很麻烦,请考虑使用依赖注入容器。