将数组划分为单独的变量并将其传递给函数

时间:2016-12-22 14:45:07

标签: php arrays

我有以下课程:

class Foo {
  public function __construct($id, $name, $value) {}
}

我想使用数组中的变量初始化此类,例如:

$arr = array(1, 'some name', 'some value');
$fooObj = new Foo($arr);

它应该像j6中的ES6传播运算符一样工作:

callFunc(...arr);

这可能吗?

2 个答案:

答案 0 :(得分:3)

在PHP> = 5.6.0中,当您使用...显示JavaScipt时使用argument unpacking

$fooObj = new Foo(...$arr);

对于以前的版本,您可以使用call_user_func_array(),但遗憾的是,不会实例化对象并传递给构造函数。

根据deceze,您可以使用ReflectionClass::newInstanceArgs来实例化您的对象:

$class  = new ReflectionClass('Foo');
$fooObj = $class->newInstanceArgs($arr);

答案 1 :(得分:-2)

spread运算符允许您传递参数列表,该函数将这些参数作为数组。在 PHP 中,您可以使用变量参数列表运算符...”。

http://docs.php.net/manual/en/functions.arguments.php#functions.variable-arg-list

示例:

<?php
function sum(...$numbers) {
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

echo sum(1, 2, 3, 4);
?>

使用您的示例:

class Foo {
  var $id;
  var $name;
  var $value;
  public function __construct(...$params) {
    $this->id=$params[0];
    $this->name=$params[1];
    $this->value=$params[2];
  }
}

然后致电:

$var=new Foo(1, 'some name', 'some value');

在您的情况下,您尝试将一组参数传递给函数。在这种情况下,您可以省略“...”运算符并传递元素:

class Foo {
  var $id;
  var $name;
  var $value;
  public function __construct($params) {
    $this->id=$params[0];
    $this->name=$params[1];
    $this->value=$params[2];
  }
}

然后致电:

$arr = array(1, 'some name', 'some value');
$fooObj = new Foo($arr);