Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Свойства классов и передача параметров по ссылке
И собственно вопрос
В конструктор класса cls мы передаем ссылку на объект obj
В конструкторе присваиваем свойству prop этот объект
Собственно вопрос, создасться ли новый объект при этом или будет все же присвоена ссылка ?
Иными словами сколько экземпляров класса SomeClass будет существовать.
И есть будет создан второй экземпляр, то есть способ этого избежать?
В PHP5 при такой записи, в $this->prop будет скопированна ссылка на объект $obj. Независимо от того каким образом $obj передается в конструктор.
P.S. Если нужно сделать копию объекта, используйте метод __clone().
JustUserR
Отправлено: 30 Сентября, 2009 - 18:18:17
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
eai Такой код напоминает копирующий конструктор из C++ для копирования объектов целоком а не ссылок на них (А также копирования внутренностей объекта и отдельног выделения памяти)
В PHP наверное надо использовать метод приведенный Ch_chov хотя на самом деле такое поведение неочевидно
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
eai
Отправлено: 30 Сентября, 2009 - 19:11:50
Частый посетитель
Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009 Откуда: Петроград
Помог: 10 раз(а)
Спасибо, я как раз и хотел избежать клонирования объекта.
Спасибо за справку.
P.S.
вот блин ... три строчки написал и выдал в себе программиста на с++
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.