我有几个在数组中操作数据的函数,例如unset_data(),你向它传送值和无限数量的字符串参数,比如:
unset_data( $my_array, "firstname", "password" );而且它可以处理多维数组等,非常简单。
但是这个函数是否应该使用对数组的引用并直接更改它呢?
或者我应该返回值未设置的新数组。
我永远不能决定函数是否应该使用引用,
是否有类似的,具体的情况或例子,何时和何时不使用它们?
谢谢
发布于 2012-03-01 16:53:25
我会问自己这个函数的预期用例是什么。典型的用例是否涉及保持原始数据的完整性并从中派生新数据,或者此函数的显式用例是否用于修改数据?
假设md5会在适当的位置修改数据,这将是非常不方便的,因为我通常希望保持原始数据的完整性。所以我总是要这样做:
$hash = $data;
md5($hash);而不是:
$hash = md5($data);这是非常难看的代码,是由函数的API强加给您的。
但是,对于unset,我不认为典型的用例是用于派生新数据:
$arr = unset($arr['foo']);这看起来很笨拙,而且可能会影响性能。
发布于 2012-03-01 16:52:11
一般来说,最好是按值返回,而不是引用,因为:
大多数情况下,这些优势是以耗尽额外内存为代价的。除非您有充分的理由(或者更好的是,证据)相信额外的内存消耗将是一个问题,否则我的建议是只返回变异的值。
发布于 2012-03-01 16:52:51
我觉得这个问题没有一个你应该/不应该回答的一般问题--这完全取决于使用情况。
我个人的感觉是倾向于通过引用传递,以保持它的行为与本机unset()更一致,但如果你最终可能不得不在调用函数之前定期复制数组,那么就使用返回值。按引用方法的另一个优点是,您可以返回一些其他信息以及实现数组的修改-例如,您可以返回一个整数,该整数描述根据参数从数组中删除了多少个值。
我认为这两个选项中的任何一个都没有可靠的“最佳实践”的论据,所以简短的答案是:
做任何你觉得最舒服的事情,以及任何允许你写出最简洁、可读和自我文档化的代码。
https://stackoverflow.com/questions/9513126
复制相似问题