在 PHP 中,将变量作为数组传递还是作为每个变量的单独变量传递更好,
我的意思是,在 30 个关联数组中,我可能使用其中 5 个变量的情况?将它们作为五个变量单独传递,还是只传递整个数组会更好吗?
最佳答案
一般而言,在选择如何定义函数时需要考虑一些事项。这可能不会直接回答您的问题,但它可能提供选择一种方式而不是另一种方式的理由,以及为什么它们可能更适合不同的事情。
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);
当然,总有异常(exception),您可能会发现自己有一个很大的参数列表:
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) {
...
}
说你必须以这种方式、那种方式甚至其他方式来做这件事是没有意义的,但是值得记住这一点,因为你可能会在一种情况下编写一个函数,并且那么你(或其他人)可能会在许多个月后重新访问它,并且很难弄清楚发生了什么。如果将单个数组传递给函数绝对有意义,那么就是这样。如果没有,而且是为了方便,那就再考虑一下。
关于php - 将数组或单独的变量传递给函数 - PHP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10054159/