在过去的几年里,我使用这个公式来读取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方法中使用变量bar和planet及其相对值。但我想问的是:有更好的方法吗?例如,我可以用另一种方法封装的东西?
更新
因此,考虑到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