function testMultiArgsB($a, ...$b) { var_dump(func_get_arg(2)); var_dump(func_get_args()); var_dump(func_num_args()); echo $a; var_dump($b); // 除$a以外的 } testMultiArgsB(1, 2, 3, 4);
和参数默认值一样,有多个参数的情况下,...b也不要放在前面,这样后面的参数并不会有值,所有的参数都会在b也不要放在前面,这样后面的参数并不会有值,所有的参数都会在b中。不过PHP默认已经帮我们解决了这个问题,如果...参数后面还有参数的话,会直接报错。
利用这个操作符,我们还可以很方便的解包一些数组或可迭代的对象给方法参数,例如:
function testMultiArgsC($a, $b){ echo $a, $b; } testMultiArgsC(...[1, 2]);
是不是很有意思,那么我们利用这个特性来合并一个数组会是什么效果呢?
$array1 = [[1],[2],[3]]; $array2 = [4]; $array3 = [[5],[6],[7]]; $result = array_merge(...$array1); // Legal, of course: $result == [1,2,3]; print_r($result); $result = array_merge($array2, ...$array1); // $result == [4,1,2,3] print_r($result); $result = array_merge(...$array1, $array2); // Fatal error: Cannot use positional argument after argument unpacking. $result = array_merge(...$array1, ...$array3); // Legal! $result == [1,2,3,5,6,7] print_r($result);
和方法声明参数时一样,在外部使用...操作符给方法传递参数时,也不能在...后面再有其他参数,所以array_merge(...array1, array1,array2)的操作会报错。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/source/PHP%E6%96%B9%E6%B3%95%E5%8F%82%E6%95%B0%E7%9A%84%E9%82%A3%E7%82%B9%E4%BA%8B%E5%84%BF.php
参考文档:
https://www.php.net/manual/zh/functions.arguments.php
https://www.php.net/manual/zh/functions.arguments.php#121579
总结到此这篇关于关于PHP方法参数的文章就介绍到这了,更多相关PHP方法参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章: