копирование объекта PHP

Копирование объектов, передача по ссылке

В php5 у нас появились новые принципы работы с объектами:

  • копирование объекта;
  • передача объекта по ссылке.

Рассмотрим фрагмент кода:

$obj2 = $obj1; //копирование объекта в PHP4
$obj2 = &$obj1; //передача по ссылке в PHP4
$obj2 = $obj1; //передача по ссылке в PHP5
$obj2 = clone $obj1; //копирование объекта в PHP5

В PHP4 первая строка — это копирование объекта; вторая строка — передача объекта по ссылке, т.е. это один и тот же объект, только называется по-разному (грубо — как ярлык на рабочем столе).

А в PHP5 третья строка кода — это уже передача по ссылке. А копирование в PHP5 идет через clone (четвертая строка кода).

Поэтому важно знать, под какую версию php был написан код, если вы работаете с чужим кодом.

При клонировании в php5 конструктор не вызывается. Но ведь при клонировании создается новый объект. И у нас может возникнуть потребность что-то автоматически выполнить (как в случае с конструктором). Поэтому мы можем описать метод __clone. Т.е. когда php видит клонирование объекта, он лезет внутрь класса и ищет этот метод. Если такой метод есть, php его автоматом вызывает. Пример метода __clone.

class MyClass {
public $property;
function __clone(){
$this->property = 2;}
}
$myObj = new MyClass();
$myObj->property = 1;
$myObj2 = clone $myObj;
print($myObj->property); // Печатает 1
print($myObj2->property); // Печатает 2



Добавить комментарий

Ваш e-mail не будет опубликован.