在等待对类型化数组的本机支持的同时,这里有两种替代方法,可以通过滥用变量函数来确保数组的强类型化。这些方法的性能对于作者来说是一个谜,因此对它们进行基准测试的责任落在了读者身上。
PHP 5.6添加了splat操作符(…),用于将数组解压缩为函数参数。PHP 7.0添加了标量类型提示。PHP的最新版本进一步改进了类型系统。通过这些添加和改进,可以对类型化数组提供适当的支持。
<?php(电话)
声明(严格类型=1);
功能typeArrayNullInt类型(?整数...$参数):无效{
}
功能做点什么(数组$整数):无效{
(功能(?整数...$参数) {})(...$整数);
(fn(?)?整数...$参数) =>$参数)(...$整数);
类型数组NullInt(...$整数);
}
功能做些其他事情(?整数...$整数):无效{
}
$整数= [1,2,三,4,无效];
做点什么($整数);
做些其他事情(...$整数);
?>
这两种方法都适用于所有类型声明。这里的关键思想是让函数在遇到输入冲突时抛出一个运行时错误。doSomethingElse中使用的类型方法比这两种方法更干净,但它不允许在变参数之后有任何其他参数。它还要求调用站点了解此类型实现并解压缩数组。doSomething中使用的方法比较混乱,但它不要求调用站点知道键入方法,因为解包是在函数中执行的。由于doSomethingElse还可以接受n个单独的参数,而as-doSomething只接受一个数组,因此它的含义也不那么模糊。如果在PHP中添加了对本机类型数组的支持,doSomething的方法也更容易剥离。这两种方法都只适用于输入参数。需要在调用站点进行数组返回值类型检查。
如果未启用strict_types,则可能需要从类型检查函数返回强制标量值(例如,浮点和字符串变为整数),以确保正确的类型。