2012-04-07 116 views
2

在PHP中将变量传递为数组还是作为每个变量的独立变量会更好吗?我的意思是,在30个关联数组中,我可能使用5个变量的情况下,将它们分别作为五个变量传递给它们,还是传递整个数组呢?将数组或变量传递给函数 - PHP?

+1

没有一个例子就很难说。你能否在你的问题中提供这样一个例子? – 2012-04-07 11:51:35

回答

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

没有意义,说你去做这样,还是那个样子,甚至是其他的方式,但它是值得保持它在心中,因为你可以在一个情况下编写一个函数,然后你(或其他人)可能会在很多月后重新访问它,并且很难弄清楚发生了什么。如果将单个数组传递给函数是绝对有意义的,那就是了。如果没有,并且为了方便起见,那么再想一想。

+0

很好的回答!非常感谢兄弟! – cgwebprojects 2012-04-07 16:37:18