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
}

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

4

2 回答 2

1

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

于 2012-06-30T00:27:45.557 回答
1

每个人都说的答案是“视情况而定”。在您的具体示例中,“创建”函数,代码的使用和维护不太明显,因此避免这种模式可能是个好主意。

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

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() ,否则之前使用引用的方法并没有说明这一点。

但是,您不会发现使用任何一种方法的性能差异,两者都可以正常工作。但是您会发现编写易于遵循和使用的代码最终会大有帮助。

于 2012-06-30T01:07:21.667 回答