在 php 中解压一组参数
Posted
技术标签:
【中文标题】在 php 中解压一组参数【英文标题】:unpacking an array of arguments in php 【发布时间】:2010-09-22 14:23:24 【问题描述】:Python 提供了“*”运算符来解压缩元组列表并将它们作为参数提供给函数,如下所示:
args = [3, 6]
range(*args) # call with arguments unpacked from a list
这相当于:
range(3, 6)
有谁知道是否有办法在 php 中实现这一点?一些“PHP Unpack”变体的谷歌搜索并没有立即出现任何东西..也许它在 PHP 中被称为不同的东西?
【问题讨论】:
【参考方案1】:在php5.6
Argument unpacking via ...
(splat operator) 已添加。使用它,您可以摆脱call_user_func_array()
以获得这个更简单的替代方案。比如有一个函数:
function add($a, $b)
return $a + $b;
用你的数组$list = [4, 6];
(php5.5以后可以这样声明数组)。
您可以使用...
调用您的函数:
echo add(...$list);
【讨论】:
【参考方案2】:<?php
function add(int ...$arr) // typehint ready
return array_sum($arr);
var_dump(add(1, 2, 3, ...[1, 2, 3])); // int(12)
另一个带有 ... - 运算符的示例。 RFC:https://wiki.php.net/rfc/variadics
【讨论】:
【参考方案3】:在某些场景下,你可能会考虑使用unpacking
,这在php中是可能的,类似于python的方式:
list($min, $max) = [3, 6];
range($min, $max);
至少我是这样得出这个答案的。
谷歌搜索:PHP argument unpacking
【讨论】:
非常好。我在考虑($min, $max)
或$min, $max
。但是list
是我要找的东西【参考方案4】:
你应该使用 call_user_func_array
call_user_func_array(array(CLASS, METHOD), array(arg1, arg2, ....))
http://www.php.net/call_user_func_array
或者使用反射apihttp://www.php.net/oop5.reflection
【讨论】:
【参考方案5】:您可以使用call_user_func_array()
来实现:
call_user_func_array("range", $args);
使用您的示例。
【讨论】:
这看起来像是一个旧答案 - 现在使用参数解包运算符可能更合适,请参阅@Salvador Dali 的答案 同意@jgivoni。 PHP 的总趋势,首先出现在 7 中,现在是 PHP 8,远离不受控制的函数,例如call_user_func_array()
、func_get_args()
等,转而使用可变参数运算符“...”。现在......如果有人能告诉我如何在 python 中执行此操作,我将非常感激: $m = 'getName'; $name = $obj->$m();以上是关于在 php 中解压一组参数的主要内容,如果未能解决你的问题,请参考以下文章