繁体   English   中英

php返回或引用?

[英]php return or reference?

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

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

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

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

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

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

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

谢谢

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

  1. 这是最常见的使用模式(关于这个特定功能,请记住一点)
  2. 你可以自由创建调用链,例如你可以编写array_filter(unset_data(...))
  3. 一般来说,没有副作用的代码(我以调用者可见的方式调用参数的变异产生副作用)更容易推理

大多数情况下,这些优势是以耗尽额外内存为代价的。 除非你有充分的理由(或者更好,证明)相信额外的内存消耗将是一个问题,我的建议是只返回变异的值。

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

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

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

代替:

$hash = md5($data);

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

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

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

这似乎非常笨重,也可能是性能损失。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM