在 php 中读取函数参数的最佳方法是什么?

What's the best way to read parameters of a function in php?

在过去的几年里,我在 php 类:

中使用这个公式来读取我的方法中的参数
$params = func_get_args();
if(is_array($params[0])){
    foreach($params[0] as $key => $value){
        ${$key} = $value;
    }
}

它工作正常,就好像我通过了这样的东西:

$class->foo(array('bar' => 'hello', 'planet' => 'world'));

我将在我的 foo 方法中使用变量 barplanet 及其相对值。 但我要问的是:有没有更好的方法来做到这一点?例如,也许我可以用另一种方法封装一些东西?

更新

所以,考虑到 rizier123 评论,在与我的一个朋友聊天后,我确定了我认为传递参数到函数的更好方法。据我所知,我将始终只将一个参数传递给该函数,该参数始终是一个数组,因此无需调用 func_get_args() 函数,但我最好一直期待一个数组,并且默认情况下,我设置了一个空数组,如下例所示:

class MyClass{
    public function MyMethod(array $options = array()){            
        extract($options);             
    }
}

$my = new MyClass();
$my->MyMethod(array('name' => 'john', 'surname' => 'doe'));
// Now MyMethod has two internal vars called $name and $surname

是的,您可以使用 extract() 将数组转换为变量,如下所示:

extract($params[0]);

您可以使用 PHP 内置函数 extract()

这样使用:

$var_array = array("color" => "blue",
                   "size"  => "medium",
                   "shape" => "sphere");
extract($var_array);

当你 运行 echo $color, $size, $shape; 它输出:

blue, medium, sphere

PHP 5.6 中有一项新功能,称为 可变参数函数 http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

function foo(...$arguments) {
    foreach ($arguments as $arg) {
        var_dump($arg);
    }
}

foo('1', 2, true, new DateTime('now'));