Передача в функцию объекта НЕ по ссылке

slego

Новичок
Передача в функцию объекта НЕ по ссылке

Столкнулся с "проблемой" передачи объекта в функцию НЕ по ссылке.
Итак, имеем два наших любимейших класса
PHP:
class Bar
{
	private $_name = "";
	
	public function setName($name)
	{
		$this->_name = $name;
	}
	
	public function getName()
	{
		echo get_class($this)." => ".$this->_name."<br>";
	}
};

class Foo
{
	private $_bar = null;
	
	public function __construct(Bar $bar)
	{
		$this->_bar = $bar;
	}
	

	public function getBar()
	{
		return $this->_bar;
	}
};
Зааааапускаем

PHP:
$bar = new Bar();
$bar->setName("bar");
$bar->getName();					// Bar => bar

$foo = new Foo($bar);
$foo->getBar()->setName("foobar");
$bar->getName();					// Bar => foobar
Т.е. можно видеть, что в 5-м php передача объекта автоматически происходит по ссылке, хотя
это явно не указано. Мне понадобилось передавать НЕ по ссылке. Единственное, до чего я до думался, так это использовать "clone":
PHP:
$bar = new Bar();
$bar->setName("bar");
$bar->getName();					// Bar => bar

$foo = new Foo(clone $bar);
$foo->getBar()->setName("foobar");
$bar->getName();					// Bar => bar
Вроде как работает, значение name объекта bar не изменилось.
Является ли вообще такой метод здравым? Возможно, существует решение красивей и правильней?
Большое спасибо.

-~{}~ 14.08.05 22:53:

Чувствую, линчуют меня за такие вопросы... :)
Наверное, плохо искал....
 
Сверху