如何组织你的函数中的参数?

时间:2014-09-12 17:30:37

标签: php arrays data-structures

我是干净且可读的代码的守护者,因此我发现传递给函数的许多参数通常都没有意义,人们需要通过这些函数来理解他们正在做什么和接收什么。

每个例子:

<?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'
));    
?>

您对此有何看法?

2 个答案:

答案 0 :(得分:1)

我同意你的观点,即代码气味太多了。只是不和你一样。

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

然而,如果你做后者,你就不能解决任何问题。至少不是你想要解决的问题:

  

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

你的第二个例子根本没有解决这个问题。它只会让它更难理解它的作用,因为现在我不得不看一下函数的主体,而不是能够查看函数的主体,看看这个东西需要和做什么。

当我看到签名:

function hi($name, $age, $description)

很明显,该功能需要名称,年龄和描述。但是在查看签名时:

function hi($options)

我不知道它需要什么。 $options可以是任何事情。

第二种方法的另一个缺点是你无法向参数添加type hints

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

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

答案 1 :(得分:0)

实际上,PHP 5.6只是添加了将参数传递给函数的新方法!

http://php.net/manual/en/migration56.new-features.php#migration56.new-features.variadics

您可以使用“...”运算符传入一组参数。

传统的选择是使用您的示例,并确保正确评论您的代码。

希望有所帮助!