【问题标题】:When to modify and when duplicate arguments?何时修改以及何时重复参数?
【发布时间】:2010-01-04 01:55:02
【问题描述】:

考虑函数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

我问的原因是因为我想知道是否有任何指导方针来决定是否使用“按引用传递和修改”方法与“通过”方法编写函数-by-value, modify and return”的方法。

【问题讨论】:

    标签: php pass-by-reference argument-passing


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,PHP 方法随处可见,但是您对编写自己的函数有什么建议吗?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-05-11
        • 2012-11-11
        • 2013-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多