什么';s是在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 5.6中有一个新功能,叫做变分函数http://php.net/manual/en/functions.arguments.php#functions.variable-参数列表

function foo(...$arguments) {
    foreach ($arguments as $arg) {
        var_dump($arg);
    }
}
foo('1', 2, true, new DateTime('now'));

您可以使用PHP内置函数extract()来完成此操作。

这样使用:

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

当您运行echo $color, $size, $shape;时,它会输出:

blue, medium, sphere