在下面的情况下,
class my_class {
public __construct($params = array()){
**** do something
}
}
$other_object = new some_class();
$object = new my_class(array(
'var1' => 'test'
'object' => $other_object));
$ other_object 将通过引用或值传递?
答案 0 :(得分:16)
对象始终是引用,除了clone
它明确。
您可以使用spl_object_hash()
检索“对象ID”,然后将它们相互比较。请记住,一旦垃圾收集器从内存中删除了一个对象,ID就可能被重用了。
答案 1 :(得分:2)
以下是一个示例,显示引用对象的每个位置...... http://codepad.org/HK6Oo4xL
答案 2 :(得分:0)
php中的对象按值传递。有关详细信息,请参阅this answer。
答案 3 :(得分:0)
PHP 5中的对象始终通过引用传递。在debug_zval_dump()的帮助下,您可以检查变量的引用计数以计算对象实例的引用数。注意文档中的注释,你会发现许多有关将变量传递给函数的有趣信息。
答案 4 :(得分:0)
class test{
public $test = 1;
}
$obj1 = new test;
$orginal = [$obj1,array(2),3];
$copy = $orginal;
echo 'orginal array';
var_dump($orginal);
echo 'copy of orginal';
var_dump($copy);
//after changing
$copy[0]->test = 'changed';
$copy[1][0] = 'changed';
$copy[3] = 'changed';
echo 'orginal array after changing its copy';
var_dump($original);
echo 'copy of orginal after changing';
var_dump($copy);
输出为
original array
array (size=3)
0 =>
object(test)[38]
public 'test' => int 1
1 =>
array (size=1)
0 => int 2
2 => int 3
copy of original
array (size=3)
0 =>
object(test)[38]
public 'test' => int 1
1 =>
array (size=1)
0 => int 2
2 => int 3
original array after changing its copy
array (size=3)
0 =>
object(test)[38]
public 'test' => string 'changed' (length=7)
1 =>
array (size=1)
0 => int 2
2 => int 3
copy of original after changing
array (size=3)
0 =>
object(test)[38]
public 'test' => string 'changed' (length=7)
1 =>
array (size=1)
0 => string 'changed' (length=7)
2 => string 'changed' (length=7)
当副本中的对象发生更改时,原始对象也会更改,但数组和变量保持不变,因为它们是作为值传递的。
有关对象参考的更多信息,请参阅:Objects and reference