在 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 中解压一组参数的主要内容,如果未能解决你的问题,请参考以下文章

PHP编译参数详解

PHP -- 编译安装

PHP获取音频mp3文件时长或音频文件其它参数属性

查找是不是可以使用一组参数实例化类模板,arity-wise(在 C++17 中)

Linux 压缩解压操作

如何在Linux上使用tar命令解压和压缩文件