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


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

  • копирование объекта;
  • передача объекта по ссылке.Рассмотрим фрагмент кода:
    [php]
    $obj2 = $obj1; //копирование объекта в PHP4
    $obj2 = &$obj1; //передача по ссылке в PHP4
    $obj2 = $obj1; //передача по ссылке в PHP5
    $obj2 = clone $obj1; //копирование объекта в PHP5
    [/php]

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

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

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

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

    [php]
    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
    [/php]


Ваш комментарий

Ваш адрес email не будет опубликован.

Для отправки комментария, поставьте отметку, что разрешаете сбор и обработку ваших персональных данных . Политика конфиденциальности