我建议使用关联数组来传递命名参数,但将它们保留在数组中而不提取它们。
function myFunc(array $args) {
echo "Hi, " . $args['name'];
// etc
}
这有几个原因。查看该函数,您可以非常清楚地看到我指的是传递给函数的参数之一。如果您提取它们,并且没有注意到extract()
您(或下一个人)会在那里挠头想知道这个“ $name
”变量来自哪里。即使您确实知道您正在提取局部变量的参数,它在一定程度上仍然是一个猜谜游戏。
其次,它确保其他代码不会覆盖 args。您可能已经编写了函数,只希望有名为$foo
and的参数$bar
,因此在您的其他代码中,您定义$baz = 8;
了例如。稍后,您可能希望扩展您的函数以获取一个名为“baz”的新参数,但忘记更改您的其他变量,因此无论在参数中传递什么,$baz
都将始终设置为 8。
使用数组也有一些好处(这些同样适用于提取或留在数组中的方法):您可以在每个名为的函数的顶部设置一个变量$defaults
:
function myFunc (array $args) {
$default = array(
"name" => "John Doe",
"age" => "30"
);
// overwrite all the defaults with the arguments
$args = array_merge($defaults, $args);
// you *could* extract($args) here if you want
echo "Name: " . $args['name'] . ", Age: " . $args['age'];
}
myFunc(array("age" => 25)); // "Name: John Doe, Age: 25"
您甚至可以删除所有$args
没有相应$default
值的项目。这样您就可以确切地知道您拥有哪些变量。