Создаем динамические веб-сайты с помощью PHP, MySQL и JavaScript |
Страница 109 из 478 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. |