Создаем динамические веб-сайты с помощью PHP, MySQL и JavaScript

Печать

Sobject2->name - "Amy";

echo "objectl name = " . $objectl->name . "<br />"; echo "object2 name = " . $object2->name;

class User {

public Sname;

}

?>

Мы создали объект Sobjectl и присвоили свойству name значение Alice. Затем мы создали Sob ject2, присвоили ему значение Sobjectl и значение Amy непосредственно свойству name объекта Sobject2 — или подумали, что присвоили. Но этот код выдаст следующую информацию:

objectl name = Amy object2 name = Amy

Что же произошло? И Sobjectl, и Sobject2 ссылаются на один и тот же объект, поэтому изменение свойства name, принадлежащего Sobject2, на Amy устанавливает такое же значение и для свойства, принадлежащего Sobjectl.

Во избежание подобной путаницы следует использовать инструкцию clone, которая создает новый экземпляр класса и копирует значения свойств из исходного класса в новый экземпляр. Использование этой инструкции показано в примере 5.13.

Пример 5.13. Клонирование объекта <?php

Sobjectl = new UserO; $objectl->name = "Alice"; Sobject2 = clone Sobjectl; Sobject2->name = "Amy";

echo "objectl name = " . $objectl->name . "<br>"; echo "object2 name = " . Sobject2~>name;

class User {

public Sname;

} ?>

Вот и все. Этот код выдает то, что нам требовалось получить с самого начала:

objectl name - Alice object2 name = Amy

Конструкторы

При создании нового объекта вызываемому классу можно передать перечень аргументов. Они передаются специальному методу внутри класса, который называется конструктором и занимается инициализацией различных свойств.

В прежние времена этому методу обычно давалось имя класса, как в примере 5.14.