【发布时间】:2013-12-29 21:22:42
【问题描述】:
我有一个关于将对象作为参数传递的问题。当我们传递一个变量时,它会创建一个副本,但看起来 object 始终是一个引用指针,这是正确的吗?我已经使用以下示例代码进行了测试:
class Base
{
private $var;
function set ($var)
{
$this->var = $var;
}
function show ()
{
echo $this->var, '<br>';
}
}
class Car
{
private $obj;
function __construct($obj)
{
$this->obj = $obj;
}
function set ($var)
{
$this->obj->set($var);
}
function show()
{
$this->obj->show();
}
}
class Bus
{
private $obj;
function __construct($obj)
{
$this->obj = $obj;
}
function set ($var)
{
$this->obj->set($var);
}
function show()
{
$this->obj->show();
}
}
通过运行
$base = new Base();
$base->set('one');
$base->show(); // one
$bus = new Bus($base);
$bus->show(); // one
$car = new Car($base);
$car->set('two');
$car->show(); // two
$base->show(); // two
$bus->show(); // two
显示结果为:
one
one
two
two
two
因此,在任何地方更改基类的变量,即使它作为参数传递给函数或另一个类也会影响所有这些,这是否意味着它总是指向同一个对象作为指针?
谢谢。
【问题讨论】:
-
对象默认通过引用传递。但实际上,php 引用并不是真正的引用,每次你传递一个对象时,php proccesor 都会创建一个相同的新对象,如果你改变一个,它就会改变另一个。