什么是最好的函数传递 - 变量或数组/对象?

时间:2011-02-05 06:20:03

标签: php function

将数据传递给函数 - 变量或数组(对象)的最佳做法是什么。

例如,我需要大多数功能的用户信息。我应该使用所有信息传递完整的用户对象,还是只传递我需要的东西(总是用户名,有时是id,很少是其他用户信息)

function do_something($data, $user) // $user is object

function do_something($data, $user_name, $user_id) // only variables 

此案例的最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

作为开发人员,当你开始编码时,你需要一定数量的函数来使它工作,有些可能也是可选的,所以你开始创建一个类似于下面的方法签名

function do_something($var1, $var2, $var3, $var4 = false, $var5 = '')  {

//process business logic here

}

现在,假设您实现并获得有关功能和其他改进的更多反馈。如果建议的功能或改进要求您更改方法签名以合并新变量并使用默认值,那么您可能会处于某种位置。

那么避免这种情况的最佳方法是什么?在我看来,如果你使用一个接受变量的函数,它可以通过接受一个数组作为单个参数,轻松扩展以接受更多参数而不会破坏任何东西。该阵列必须在代码内部或在用户外部构建。

所以你可以重写上面的逻辑:

function do_something($args = array()) {

$myvar = (array_key_exists('mykey', $args)) ? $args['mykey'] : get_default_value('mykey');

//process business logic here

}

答案 1 :(得分:2)

所有方案都没有更好的做法。根据您的功能目的使用任何一个:

  • 如果您的函数不关心对象,则可以传递单个对象属性的值。

  • 如果你的函数以某种方式操纵对象,你应该通过直接修改它的属性或通过调用它的方法来传递对象。