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

标签 php function variables

在 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/

相关文章:

C++、仿函数、特定任务/场景、将用户输入映射到函数

c++ - 什么是纯函数?

c# - 在 C# 中允许用户定义的字符串

variables - 带有 GUI 的 Powershell 不会设置变量

php - 当列 "A"中的数据匹配时,MySQL SUM 列 "B"中的数据

php - mysqli 到 PDO 翻译

php - 如何在codeigniter中为用户打卡和打卡设置标志?

javascript - JQuery 变量没有转移到 JavaScript

c++ - 类中的静态函数,内存将如何处理?

php - 分解可能只有一个值的数组