在PHP中使用数组类类型参数

时间:2016-06-13 10:48:43

标签: php function object parameters

鉴于我有以下方法:

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的实例吗?

感谢阅读!

2 个答案:

答案 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);
}

// ...