2012-06-30 82 views
4

例子:使用引用创建变量是个好主意吗?

function create_pets(&$cats, &$dogs){ 
$dogs = get_dogs(); 
$cats = get_cats(); 
} 

所以我想这样称呼它:

function foo(){ 
    create_pets($cats, $dogs); 

    // here use $cats and $dogs variables normally 
} 

我知道我可以只分配一个新的varible这些吸气功能之一的返回值,但是这仅仅是一个例。在我的情况下,不仅仅是一个吸气...

+2

在这个例子中,你显示ID说不。但这取决于情况。 – Joel

+0

您可能会在programmers.stackexchange.com上获得更详细的分析答案。尽管如此,我认为这是一个很好的问题。 –

+0

or codereview.stackexchange.com –

回答

1

大家都说的答案是“取决于”。在你的具体例子中,一个“创建”函数,代码不太明显的工作和维护,因此避免这种模式可能是一个好主意。

但这里是个好消息,有做你正在尝试做的是保持简单和紧凑,同时不使用引用的方法:

function create_pets(){ 
    return array(get_dogs(), get_cats()); 
} 


function foo(){ 
    list($dogs, $cats) = create_pets(); 
    //here use $cats and $dogs variables normally 
} 

正如你看到的,你可以简单地返回一个数组,使用the list language construct可以在单行中获取各个变量。说明这里发生的事情也更容易,create_pets()显然会返回新的$ cats和$ dogs;除非直接检查create_pets(),否则之前使用引用的方法没有说明这一点。

虽然你不会发现使用任何一种方法的性能差异,两者都可以工作。但是你会发现,编写易于遵循和编写代码的代码最终会走很长的路。

1

这取决于情况。大多数情况下,您通常会按值调用变量,但在某些情况下,如果要修改变量内容而不更改代码其他部分中的变量值,则通过引用调用是个不错的主意。其他方面,如果你只想要实际的内容,只有实际的内容,然后按价值调用是一个更好的主意。这个链接很好地解释了它。 http://www.exforsys.com/tutorials/c-language/call-by-value-and-call-by-reference.html

+0

好吧,这不是那种情况。我只是喜欢create(var1,var2):)的语法,它使代码稍微更紧凑 – Alex

相关问题