在PHP中将变量作为数组传递或作为单独的变量传递给
是否更好?我的意思是在30个关联数组中我可能使用5个变量的实例?最好是将它们作为五个变量分别传递,还是只传递整个数组?
答案 0 :(得分:3)
一般而言,在选择如何定义函数时需要考虑一些事项。这可能不会直接回答你的问题,但它可能提供了选择一种方式而不是另一种方式的理由,以及为什么它们可能对不同的事物更好。
function do_something($a, $b, $c, $d, $e) {
...
}
function do_something(array $a) {
...
}
首先,有语义。你的函数是否依赖于那个特定的数组,或者只是在那种情况下你传递的参数恰好在数组中?
如果它依赖于数组,那么理所当然地将其作为唯一参数传递,并且代码仍然可读,因为你不会在任何其他情况下使用它:
function do_something_to_big_array($big_array) {
....
}
如果不具体,可能会有问题。
该功能变得模糊不清: 如果不读取函数就无法使用它来找出数组必须包含的元素。
功能变得更复杂: 您可以在定义中提供具有默认值的默认数组,但不会使用该数组 当你提供参数时。您将发现自己试图重新实现标准参数列表,检查密钥是否存在,如果不存在则设置它们等等。
// default array if no argument supplied
function do_something($a = array('a' => true, 'b' => 10, 'c' => false)) {
// you don't know if you're working with the default or not
if (!isset($a['c'])) $a['c'] = false;
...
}
// define a defaults array and replace duplicates with $a's values
function do_something(array $a) {
$defaults = array('a' => true, 'b' => 10, 'c' => false);
$a = array_replace($defaults, $a);
}
// have defaults without extra logic in the function
function do_something($a = true, $b = 10, $c = false) {
...
}
想象一下,必须为你声明的每个函数执行此操作,这样就可以传入一个数组并让它可靠地工作,而不是单独的参数。
可读性受损;更杂乱: 您拥有传递给函数所需的所有数据,但您必须先创建包含该数据的关联数组,然后才能使用它。
$data = array('a' => $a, 'b' => $b, 'c' => $c);
do_something($data);
当然,总有一个例外,你可能会发现自己有一个大的参数列表:
function do_something($a, $b, $c, ... $x, $y, $z) {
...
}
这是不合理的,需要重构,所以你可以传入一个数组,并使用它,因为你永远不会在任何其他情况下使用它:
function do_something_with_alphabet(array $alphabet) {
...
}
或者如果合理的话,你可以把它分成更多的功能:
function do_something_first($a, $b, $c) {
...
}
function do_something_last($x, $y, $z) {
...
}
没有必要说你有以这种方式,或者那种方式,甚至是其他方式,但是值得记住它,因为你可以在一种情况下编写一个函数,并且然后你(或其他人)可能会在很久以后重新访问它,并且无法弄清楚发生了什么。如果将单个数组传递给函数是绝对有意义的,那就是它。如果它没有,并且为了方便起见,那么请多考虑一下。