在php中返回一个对象会创建该对象的新实例吗?
我有一个为我存储对象的类,该类是一个返回任何给定对象的方法。实施例;
class Simple {
private $obj = array();
public function loadObj($name) {
$this->obj[$name] = new $name();
}
public function getObj($key) {
if(isset($this->obj[$key])) {
return $this->obj[$key];
}
}
}
然后在我的代码中我可以做这样的事情,
$a = new Simple();
$a->addObj('cat');
$cat1 = $a->getObj('cat');
$cat2 = $a->getObj('cat');
这是否每次实例化一只新猫?
假设猫有setColor
和getColor
的颜色变量和方法,如果我用$cat1
更改了颜色并用$cat2
取出它会是相同的?
我会测试它,但我不在家。
答案 0 :(得分:1)
不,两次只会返回相同的值,因为您只在一个对象$a->
上调用两次函数。除非你多次打电话给addObj
,否则它不会在那里产生更多的物体。您的班级中也未定义addObj
。它是loadObj
答案 1 :(得分:0)
我得到你要求的东西,我想我在PHP手册中找到了正确的答案。
" PHP引用是一个别名,它允许两个不同的变量写入相同的值。从PHP 5开始,对象变量不再包含对象本身作为值。它只包含一个对象标识符,允许对象访问者查找实际对象。当一个对象通过参数发送,返回或分配给另一个变量时,不同的变量不是别名:它们包含标识符的副本,它指向同一个对象。"
所以是的,如果你在$ cat1上调用了set color,它也会改变$ cat2上的颜色,因为引用是指向同一个对象的别名。
答案 2 :(得分:0)
每个PHP对象都是identified by a handle(这是一个数字)。解释器使用句柄在内部表中查找对象。
存储PHP对象的变量实际存储此句柄。将对象分配给另一个变量时,句柄将复制到新变量,而不是实际对象的数据。
在php中返回一个对象会创建该对象的新实例吗?
对象的所有其他操作(赋值,作为函数的参数传递的对象和函数返回的对象)复制对象句柄,不复制实际对象。