我有一个需要传递信息的函数。信息包含在对象中。因此,我必须将该对象作为函数参数之一传递。然而,该对象非常大,我希望减少每次传递时制作副本所涉及的开销。这是一个例子 我的函数调用:
1 myFunction($myObject1);
和功能:
2 function myFunction($myObject2){
3 //do stuff
4 }
据我所知,在php中还有更多内容,而不仅仅是传递引用和传递值。如果我错了,请纠正我,但我相信在第1行只有对象的引用,但在第2行,对象被复制。为避免此副本,我已将($myObject2)
替换为(&$myObject2)
。我仍然将函数定义中的对象称为$myObject2
,一切似乎都有效。我相信我现在只使用参考,因此没有制作对象的副本(这是我的目标)。我的想法是否正确?如果不是为什么?
答案 0 :(得分:0)
在PHP5中,"对象"不是价值观。变量$myObject1
,$myObject2
的值是对象引用(即指向对象的指针)。你不能得到对象本身&#34 ;;对象只能通过这些指针进行操作。
分配和传递值仅复制值。由于对象不是值,因此无法通过赋值,传递等来克隆它们。复制对象的唯一方法是使用clone
运算符。
将&
置于变量上会使其通过引用传递或分配,而不是通过&
的值传递。通过引用传递允许您修改传递的变量。由于变量的值不能是对象,因此与对象无关。