鉴于我有以下方法:
public function create(array $notificationTypes, NotificationSettings $notificationSettings)
{
}
是否可以确保$notificationTypes
参数是NotificationType
的数组?我尝试了以下方法,但它不起作用:
public function create(array NotificationType $notificationTypes, NotificationSettings $notificationSettings)
{
}
public function create(NotificationType[] $notificationTypes, NotificationSettings $notificationSettings)
{
}
如果这不可能,除了循环$notificationTypes
之外没有其他方法可以检查每个元素是否是NotificationType
的实例吗?
感谢阅读!
答案 0 :(得分:2)
正如评论所说,你不能在方法声明中这样做。在一个合理的PHP版本中,您可以在函数体中检查数组项的类型:
if (count(array_filter($notificationTypes,
function($inst) {
return ! ($inst instanceof NotificationType));
}))) {
throw new Exception('Only instances of NotificationType please!');
}
答案 1 :(得分:1)
如果您不想手动检查类型,可以使用expectsAll中的NSPL功能。参数验证还有其他函数和预定义约束。
use function \nspl\args\expectsAll;
//...
public function create(array $notificationTypes, NotificationSettings $notificationSettings)
{
expectsAll(NotificationType::class, $notificationTypes);
}
// ...