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


Is it a good idea to create variables using references?

示例:

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

所以我会这样称呼它:

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

我知道我可以为一个新的变量分配其中一个 getter 函数的返回值,但这只是一个示例。在我的情况下,不仅仅是一个getter...

每个人都说的答案是"视情况而定"。在您的特定示例("create"函数)中,代码的使用和维护不太明显,因此避免这种模式可能是一个好主意。

但好消息是,有一种方法可以做你正在尝试做的事情,在不使用引用的情况下保持简单和紧凑:

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

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

如您所见,您可以简单地返回一个数组并使用列表语言构造在一行中获取各个变量。也更容易知道这里发生了什么,create_pets() 显然正在返回新的$cats和$dogs;以前使用引用的方法没有明确说明这一点,除非直接检查create_pets()。

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

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