2013-03-13 83 views
1

在php中返回一个对象是否会创建该对象的一个​​新实例?在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脱口说他们会是一样的吗?

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

+0

'addObj'不存在。 – hjpotter92 2013-03-13 05:30:36

+1

你你得到了jist ... – Griff 2013-03-13 05:31:30

回答

1

不,这两次只会返回相同的值,因为您只在一个对象$a->上调用了两次函数。除非您多次拨打addObj,否则不会在其中生成更多对象。 addObj也没有在您的班级中定义。它是loadObj

+0

所以如果我使用'$ cat1'改变了一个值并且使用'$ cat2'来检索它们,它们都会被改变吗?如果对象'cat'具有getLength和'setLength'方法的长度值? – Griff 2013-03-13 05:34:29

+0

您将必须先编写一个更改值方法,只有这样我们才能知道它是否或不是 – 2013-03-13 05:35:29

0

我得到你问的,我想我在PHP手册中找到了正确的答案。

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

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

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

0

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

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

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

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

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