Введение в PHP5
Страница 2. Объекты как ссылки


Объекты как ссылки

Как вам уже наверняка известно, в PHP4 переменные передаются в функции/методы по значению (передаётся копия), если в объявлении функции не поставлен символ '&', указывающий на то, что переменная должна передаваться как ссылка. В PHP5 объекты передаются всегда как ссылки. Присваивание объектов тоже происходит по ссылке.

Пример 2: Объекты как ссылки

<?php
class foo {
  var 
$x;

  function 
setX($x) {
    
$this->$x;
  }

  function 
getX() {
    return 
$this->x;
  }
}

$o1 = new foo;
$o1->setX(4);
$o2 $o1;
$o1->setX(5);
if(
$o1->getX() == $o2->getX()) print("Ох ты, Боже мой!");
?> 

Клонирование объектов

Если объекты присваиваются и передаются по ссылке, то вам нужно как-то создавать и копии объектов. Для этого используйте метод __clone.

Пример 3: Клонирование объектов

<?php
class foo {
  var 
$x;

  function 
setX($x) {
    
$this->$x;
  }

  function 
getX() {
    return 
$this->x;
  }
}

$o1 = new foo;
$o1->setX(4);
$o2 $o1->__clone();
$o1->setX(5);

if(
$o1->getX() != $o2->getX()) print("Копии взаимонезависимы");
?> 

В программировании клонирование разрешено, так что всё легально ;-)

 
« Предыдущая статья