PHP函数设计:传递参数
首先,我想说我不想在这里开始战争。我知道我的谈话可能会有一些强烈的意见,关于下面的话题,所以我正在寻找一个概述利弊的答案。在设计方面,有两种方法可以传递参数(注意,我并不是说要在被调用的函数中获取参数),但是在松散类型的语言中(我特别来自PHP的观点) 。PHP函数设计:传递参数
一方面,你可以将它们作为单独的参数如下:
foo($var1, $var2, $var3 ...);
在另一方面,你可以在你的变量打包成一个数组,然后传递一个参数的功能,数组:
$bar[] = $var1;
$bar[] = $var2;
$bar[] = $var3;
...
foo($bar);
我可以看到第二个方法的好处,当你有很多的需要在一个通用的方法进行处理的变量,但是,它也隐藏哪些变量的函数需要以操作correctl年。
第一种解决方案虽然随着变量数量的增加而迅速变为长函数调用,但它更好地显示了函数需要的变量,并且在函数调用中传递了空值时可以利用功能来分配默认值。
因此,在什么情况下应该使用哪一种或哪种情况,以及中间的情况如何,例如,数组是关联的,因此您可以在函数内部通过名称获取变量,通用的方式?对我来说,关联数组的场景看起来非常不理想,而且只是一些开发人员使用这种方式来缩短函数调用时间,同时实际增加写入的总体代码量。
我认为你传递数组的例子是毫无意义的。如果你这样做,你应该肯定使用正常的方式传递参数。
function x($width = 100, $height = 100, $color = 'red')
在这里,如果你想改变颜色,但不更改默认:如果一个函数接受这可以在几乎任何顺序传递一些可选参数
传递一个数组是唯一有用的你需要做的宽度和高度:
x(100, 100, 'blue');
iee您需要复制代码中的默认值。
而是一个可以宣布的功能如下:
function x(array $opts) {
$opts += array('width' => 100, 'height' => 100, 'color' => 'red');
}
x(array('color' => 'blue'));
为了更真实的例子,看看在Twig_Environment
构造函数:正如你可以看到,有相当一些选项,大多数的他们你可能会想保持其默认值。如果您必须将所有这些选项作为参数传递,您只需通过复制默认值来扩大代码。
您的示例显示关联数组的传递说明了PHP的*穷人的命名参数*。许多ORM实现使用这种方法。 – webbiedave 2011-05-02 19:29:13
你的例子并不完全正确。没有必要将默认值复制到函数调用。函数定义中的默认值将替换空值,以便您可以调用'x(null,null,'blue')' – Endophage 2011-05-02 19:31:41
@Endophage:这是不正确的。调用'x(null,null,'blue')'会将null的值赋给'$ width'和'$ height'。 – webbiedave 2011-05-02 19:34:54
我想把它移到程序员SE上,因为从PHP的角度来看,它与任何其他语言没有什么不同(除了PHP不允许[超载](http://en.wikipedia.org/)维基/ Method_overloading))。 – 2011-05-02 18:59:56
@Kevin:这是一个很好的编程相关问题。它应该在SO上。 – NikiC 2011-05-02 19:04:37
@nikic,它是如何更少[程序员SE](http://programmers.stackexchange.com/)。我们正在讨论开发方法(来自程序员SE常见问题),而不是那么多的算法,工具等(SO常见问题解答) – 2011-05-02 19:07:20