Banco Mail

在 PHP 中创建严格类型数组和集合

这篇文章首先出现在 Medium 上,并经作者许可在此重新发布。我们鼓励您在 Medium 上关注 Bert 并给他点赞!  中宣布的语言功能之一是添加了标记…来表示函数或方法接受可变长度的参数。 我很少看到提到的是,可以将此功能与类型提示结合起来以本质上创建类型化数组。 例如,我们可以有一个 Movie 类,其中包含一个方法来设置仅接受对象的播出日期数组我们现在可以将可变数量 DateTimeImmutable对象传递给该setAirDates()方法 如果我们传递 a 之外的其他内容的实例(给定字符串)。

这种类型化数组的问题

如果我们已经有一个DateTimeImmutable想要传递给的对象数组setAirDates(),我们可以再次使用…令牌,但这次是解压它们如果数组包含的值不 马来西亚 WhatsApp 号码数据 是预期类型,我们仍然会收到前面提到的致命错误。 此外,从 PHP 7 开始,我们可以以相同的方式使用标量类型。例如,我们可以添加一个方法来将评级列表设置为类上的浮点数Movie 同样,这确保了 ratings 属性将始终包含浮点数,而无需我们循环遍历所有内容来验证它们。所以现在我们可以轻松地对它们进行一些数学运算getAverageRating(),而不必担心无效类型。 这种类型化数组的问题 使用此功能作为类型化数组的缺点之一是我们只能为每个方法定义一个这样的数组。

使用值对象进行自定义验证

 

假设我们想要一个 Movie 类,它需要一个播放日期列表以及构造函数中的评级列表,而不是稍后通过可选方法设置它们。如果使用上面的方法,这是不可能的。 另一个问题是,当使用 PHP 7 时,我们方法的返回类型get()仍然必须是“数组”,这通常太 伊朗 电话号码列表 通用了。 解决方案:集合类 为了解决这两个问题,我们可以简单地将类型化数组注入所谓的“集合”类中。这也改善了我们的关注点分离,因为我们现在可以将平均评分的计算方法移至相关的集合类请注意,我们仍然在构造函数中使用具有可变长度的类型化参数列表,这使我们免去了循环每个评级以检查其类型的麻烦。

Leave Comment

Your email address will not be published. Required fields are marked *