将数组或单独的变量传递给函数 - PHP?

时间:2012-04-07 11:44:19

标签: php function variables

在PHP中将变量作为数组传递或作为单独的变量传递给

是否更好?

我的意思是在30个关联数组中我可能使用5个变量的实例?最好是将它们作为五个变量分别传递,还是只传递整个数组?

1 个答案:

答案 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) {
    ...
}

没有必要说你以这种方式,或者那种方式,甚至是其他方式,但是值得记住它,因为你可以在一种情况下编写一个函数,并且然后你(或其他人)可能会在很久以后重新访问它,并且无法弄清楚发生了什么。如果将单个数组传递给函数是绝对有意义的,那就是它。如果它没有,并且为了方便起见,那么请多考虑一下。

相关问题