returncall_user_func_array(array($this->address,$method),$arguments);
}
所谓聚合类,是指在类中以某种方式嵌人了其他的类,使得不论访问原始的类,还
是嵌人的类都很方便。其中需要记住的关键在于,$address 属性保存的是一个 Address 对
象。
通过这个类,下例中显示了在克隆相应对象时会出现什么问题。
克隆一个聚合类:
$rasmus=newPerson;
$rasmus->setName('Rasmus Lerdorf');
$rasmus->setCity('Sunnyvale');
$zeev=clone$rasmus;
$zeev->setName('Zeev Suraski');
$zeev->setCity('Tel Aviv');
print$rasmus->getName() .' lives in '.$rasmus->getCity() .'.';
print$zeev->getName() .' lives in '.$zeev->getCity() .'.';
Rasmus Lerdorf lives in Tel Aviv.
Zeev Suraski lives in Tel Aviv.
有意思吧。调用 setName()时没有问题是因为$name 属性是一个字符串,也就是说它在
传递时拷贝的是值。但是,因为$address 是一个对象,而对象拷贝的是引用,所以
getCity()
—
的结果出现了问题 让 Rasmus 搬到了 Tel Aviv
。
“
”
这种形式的对象克隆被称为浅克隆,或者浅拷贝。相对地, 深克隆 指的是克隆所有
有关对象的克隆。这正是 PHP 4 中的克隆方法。
要在 PHP 5 中控制如何克隆对象,是通过在相应的类中实现一个__clone()方法来达成
的。如果这个方法存在,PHP 会允许 clone()覆盖默认的行为,如例下例所示。
在聚合类中适当地实现克隆:
classPerson {
// ... everything from before
publicfunction__clone() {
$this->address =clone$this->address;