在PHP中返回对象?

时间:2013-03-13 05:29:12

标签: php object

在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');

这是否每次实例化一只新猫?

假设猫有setColorgetColor的颜色变量和方法,如果我用$cat1更改了颜色并用$cat2取出它会是相同的?

我会测试它,但我不在家。

3 个答案:

答案 0 :(得分:1)

不,两次只会返回相同的值,因为您只在一个对象$a->上调用两次函数。除非你多次打电话给addObj,否则它不会在那里产生更多的物体。您的班级中也未定义addObj。它是loadObj

答案 1 :(得分:0)

我得到你要求的东西,我想我在PHP手册中找到了正确的答案。

" PHP引用是一个别名,它允许两个不同的变量写入相同的值。从PHP 5开始,对象变量不再包含对象本身作为值。它只包含一个对象标识符,允许对象访问者查找实际对象。当一个对象通过参数发送,返回或分配给另一个变量时,不同的变量不是别名:它们包含标识符的副本,它指向同一个对象。"

所以是的,如果你在$ cat1上调用了set color,它也会改变$ cat2上的颜色,因为引用是指向同一个对象的别名。

http://php.net/manual/en/language.oop5.references.php

答案 2 :(得分:0)

每个PHP对象都是identified by a handle(这是一个数字)。解释器使用句柄在内部表中查找对象。

存储PHP对象的变量实际存储此句柄。将对象分配给另一个变量时,句柄将复制到新变量,而不是实际对象的数据。

  

在php中返回一个对象会创建该对象的新实例吗?

有两个运算符在PHP中创建新对象:newclone

对象的所有其他操作(赋值,作为函数的参数传递的对象和函数返回的对象)复制对象句柄,不复制实际对象。