现在我有了这个:
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;
}
}
有没有办法做到这一点?
答案 0 :(得分:1)
我完全放弃了在方法中调用new
。它引入了紧耦合,并期望在没有实际setFoo()
的情况下调用foo
setter是奇怪的。
保持签名中的类型检查:
public function setDataValidator(string $action, string $method, DataPermissionValidatorInterface $validator);
然后在调用方法时简单地提供“手动”依赖:
myPermissionModel->setDataValidator('foo', 'bar', new DataPermissonValidator());
答案 1 :(得分:0)
没有其他办法,AFAIK。
如果您有很多依赖关系,维护起来很麻烦,请考虑使用依赖注入容器。