说我在类的构造函数中为一个接口输入一系列值:
<?php
use Interfaces\Item;
class MyClass
{
public function __construct(Item ...$items)
{
// Do stuff
}
}
我可以轻松地手动传递这些项目:
$myclass = new MyClass($item1, $item2);
但是我努力让它更动态地工作 - 以下不能正常工作,因为它希望接收多个Item
实例而不是数组,因此它会提高{{1 }}:
TypeError
在构建新类时,我无法想出一种动态构建我想要传递的项目的方法,而不会将其更改为期望数组,我宁愿不这样做,因为类型提示显然会捕获任何不应该通过的物体。任何人都可以看到我如何实现这一目标吗?
答案 0 :(得分:4)
splat运算符(...
)有两种工作方式 - 您可以在函数定义中使用它,但您也可以使用它将项目数组解包为函数参数。
尝试:
$myclass = new MyClass(...$items);
有关完整示例,请参阅https://eval.in/927133
答案 1 :(得分:-2)
您可以使用数组创建新类:
Private Sub ListView1_DrawColumnHeader(ByVal sender As Object, ByVal e As DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader
Dim strFormat As New StringFormat()
If e.Header.TextAlign = HorizontalAlignment.Center Then
strFormat.Alignment = StringAlignment.Center
ElseIf e.Header.TextAlign = HorizontalAlignment.Right Then
strFormat.Alignment = StringAlignment.Far
End If
e.DrawBackground()
e.Graphics.FillRectangle(Brushes.SteelBlue, e.Bounds)
Dim headerFont As New Font("Arial", 8, FontStyle.Bold)
e.Graphics.DrawString(e.Header.Text, headerFont, Brushes.White, e.Bounds, strFormat)
End Sub
Private Sub ListView1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewItemEventArgs) Handles ListView1.DrawItem
e.DrawDefault = True
End Sub