php返回或引用?

时间:2012-03-01 08:47:16

标签: php associative-array reference

我有一些操作数组中数据的函数,例如unset_data()你传递了值和无限量的字符串args,如:

unset_data( $my_array, "firstname", "password" );

它可以处理多维数组等,非常简单。

但是这个函数是否应该使用对数组的引用并直接更改它?

或者我应该使用未设置的值返回新数组。

我永远无法决定函数是否应该使用引用,

是否有特定情况或示例何时何地不使用它们?

由于

3 个答案:

答案 0 :(得分:4)

一般来说,按价值返回更好,而不是参考,因为:

  1. 这是最常见的使用模式(关于这个特定功能,要记住的少一点)
  2. 您可以自由创建调用链,例如你可以写array_filter(unset_data(...))
  3. 一般来说,没有副作用的代码(我以调用者可见的方式调用参数的变异产生副作用)更容易推理
  4. 大多数情况下,这些优势是以耗尽额外内存为代价的。除非你有充分的理由(或更好,证明)相信额外的内存消耗将是一个问题,我的建议是只返回变异的值。

答案 1 :(得分:4)

我会问自己函数的预期用例是什么。典型的用例是否涉及保持原始数据的完整性并从中获取新数据,或者是此函数的明确用例来修改数据?

md5会修改到位的数据,这会非常不方便,因为我通常希望保持原始数据的完整性。所以我总是要这样做:

$hash = $data;
md5($hash);

而不是:

$hash = md5($data);

这是非常难看的代码,由函数的API强加给你。

对于unset,我不认为典型的用例是用于获取新数据:

$arr = unset($arr['foo']);

这看起来非常笨重,也可能是性能受损。

答案 2 :(得分:1)

我觉得你不应该/不应该回答这个问题 - 这完全取决于使用案例。

我的个人感觉倾向于通过引用传递,以使其行为更符合本机unset(),但如果您在调用函数之前可能最终定期复制数组,然后去返回值。引用方法的另一个优点是您可以返回一些其他信息以及实现对数组的修改 - 例如,您可以返回一个整数,该整数描述基于参数从数组中删除了多少个值。

我不认为这里有任何选项的“最佳实践”都有一个可靠的论据,所以简短的回答是:

做任何你最熟悉的事情以及任何允许你编写最简洁,最易读和自我记录的代码。