2

考虑函数sortarray_reverse

为什么一个修改传递的变量,而另一个返回一个新版本?

$a = array(3, 1, 2);

sort($a);
// $a === array(1, 2, 3)

array_reverse($a);
// $a === array(1, 2, 3)

sort可以很容易地编写为返回参数的修改副本,反之亦然array_reverse

我问的原因是因为我想知道是否有任何指导方针来决定是否使用“按引用传递和修改”方法与“按值传递、修改和返回”方法编写函数。

4

3 回答 3

1

PHP 的烦恼之一是 API确实不一致。例如:

  • 参数排序不一致(needle、haystack);
  • 下划线的使用不一致。有些函数甚至在一个部分使用下划线,但在另一部分不使用。

我认为传递引用与复制的事情在很大程度上是在同一条船上。

于 2010-01-04T02:03:59.750 回答
1

我认为用户意图可能是这里最重要的事情。在您选择的特定示例中并不是很明显,但总的来说,我想我想在设计 API 时考虑用户的期望(破坏性的就地修改与新构造的返回值) .

于 2010-01-04T02:05:44.707 回答
0

我建议坚持按值传递,返回副本,因为这是一个更安全的假设。通过引用传递,修改的 args仅在发生 2 个不同操作的情况下才有意义,例如shift,在数组被修改但第一个元素被return编辑的情况下

于 2010-01-04T03:10:20.567 回答