首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php return还是reference?

php return还是reference?
EN

Stack Overflow用户
提问于 2012-03-01 16:47:16
回答 3查看 147关注 0票数 2

我有几个在数组中操作数据的函数,例如unset_data(),你向它传送值和无限数量的字符串参数,比如:

代码语言:javascript
复制
unset_data( $my_array, "firstname", "password" );

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

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

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

我永远不能决定函数是否应该使用引用,

是否有类似的,具体的情况或例子,何时和何时不使用它们?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-01 16:53:25

我会问自己这个函数的预期用例是什么。典型的用例是否涉及保持原始数据的完整性并从中派生新数据,或者此函数的显式用例是否用于修改数据?

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

代码语言:javascript
复制
$hash = $data;
md5($hash);

而不是:

代码语言:javascript
复制
$hash = md5($data);

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

但是,对于unset,我不认为典型的用例是用于派生新数据:

代码语言:javascript
复制
$arr = unset($arr['foo']);

这看起来很笨拙,而且可能会影响性能。

票数 4
EN

Stack Overflow用户

发布于 2012-03-01 16:52:11

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

  1. 这是最常见的用法模式(关于这个特定函数,需要记住的事情少了一件事)
  2. 你可以自由地创建调用链,例如,你可以编写没有副作用的代码(我以调用者可见的方式将参数的突变称为副作用)更容易推断

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

票数 4
EN

Stack Overflow用户

发布于 2012-03-01 16:52:51

我觉得这个问题没有一个你应该/不应该回答的一般问题--这完全取决于使用情况。

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

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

做任何你觉得最舒服的事情,以及任何允许你写出最简洁、可读和自我文档化的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9513126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档