Php 如何在函数中组织参数?

Php 如何在函数中组织参数?,php,arrays,data-structures,Php,Arrays,Data Structures,我是干净易读代码的辩护者,因此我发现传递给函数的许多参数通常毫无意义,人们需要通过函数了解他们在做什么和接收什么 每个示例: <?php function hi($name, $age, $description) { echo $name . ' - ' . $age . ' - ' . $description; } hi('John', 21, 'I\'m a builder'); ?> 这样的方法是不是更好 <?php function hi($opti

我是干净易读代码的辩护者,因此我发现传递给函数的许多参数通常毫无意义,人们需要通过函数了解他们在做什么和接收什么

每个示例:

<?php
function hi($name, $age, $description) {
    echo $name . ' - ' . $age . ' - ' . $description;
}

hi('John', 21, 'I\'m a builder');
?>

这样的方法是不是更好

<?php
function hi($options) {
    echo $options['name'] . ' - ' . $options['age'] . ' - ' . $options['description'];
}

hi(array(
    'name' => 'John',
    'age' => 21,
    'description' => 'I\'m a builder'
));    
?>


你对此有什么看法?

我同意你的观点,太多的参数是一种代码味道。只是和你不一样

它们是一种代码味道,因为这可能意味着函数/方法做得太多了

然而,如果你做了后者,你就不会真正修复任何东西。至少不是您试图解决的问题:

人们需要通过这些功能来了解他们在做什么和接受什么

第二个示例根本无法解决这一问题。这只会使理解它的功能变得更加困难,因为我现在不能看到函数的签名,而是必须看到函数的主体,看看它到底需要什么,做什么

当我看到以下签名时:

function hi($name, $age, $description)
function hi($options)
很明显,函数需要名称、年龄和描述。但是,当查看以下人员的签名时:

function hi($name, $age, $description)
function hi($options)
我不知道它需要什么<代码>$options可以是任何东西

第二种方法的另一个缺点是,您永远无法添加参数

别误会我。在某些情况下,将整个数组传递给函数是完全正确的,但我觉得这不是其中之一


在您的代码中,我更担心的不是有三个参数,而是函数
echo
s data直接而不是
return
ing data。这使得它非常不灵活。

实际上,PHP5.6刚刚添加了将参数传递给函数的新方法

您可以使用“…”运算符传入参数数组

传统的选择是使用示例并确保正确注释代码


希望有帮助

这个函数只是一个例子。在函数声明中,您可以看到所需的变量以及每个参数表示的内容。但是,当向它们传递值时,您不知道要传递什么。但是,在第二个选项中,您显式地说出了要在数组的键中传递的内容。不,您没有显式地说出任何内容。你只需要一个函数:我想要一个数组。就这样。调用函数时,使用值查看它需要什么。如果你下周看你的函数,你就不知道
$options
应该包含什么。这对OPs特定的用例(两种方法中的任何一种)有什么帮助?也许是因为如果你只需要传递一个参数,你就可以不使用数组来传递它?事实上,您可以对任意数量的参数执行此操作。您不再需要显式声明数组或对象。这实际上只是另一种选择而已。我选择数组方法,因为在常见用法中,您可能已经在一个数组中使用了这些方法,比如数据库中的POST或row。