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
Форумы портала PHP.SU :: Версия для печати :: Свойства классов и передача параметров по ссылке
Форумы портала PHP.SU » PHP » Программирование на PHP » Свойства классов и передача параметров по ссылке

Страниц (1): [1]
 

1. eai - 30 Сентября, 2009 - 16:34:49 - перейти к сообщению
Еще раз всем доброго времени.

сразу пример кода
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $obj = new SomeClass(); // экземпляр некого класса
  4.  
  5. class cls
  6. {
  7.    var $prop = null;
  8.  
  9.    function __construct(&$obj)
  10.    {
  11.        $this->prop = $obj;
  12.    }
  13. }
  14.  
  15. $clsobj = new cls($obj);
  16.  


И собственно вопрос
В конструктор класса cls мы передаем ссылку на объект obj
В конструкторе присваиваем свойству prop этот объект
Собственно вопрос, создасться ли новый объект при этом или будет все же присвоена ссылка ?

Иными словами сколько экземпляров класса SomeClass будет существовать.
И есть будет создан второй экземпляр, то есть способ этого избежать?
2. Ch_chov - 30 Сентября, 2009 - 17:31:26 - перейти к сообщению

В PHP5 при такой записи, в $this->prop будет скопированна ссылка на объект $obj. Независимо от того каким образом $obj передается в конструктор.

P.S. Если нужно сделать копию объекта, используйте метод __clone().
3. JustUserR - 30 Сентября, 2009 - 18:18:17 - перейти к сообщению
eai Такой код напоминает копирующий конструктор из C++ для копирования объектов целоком а не ссылок на них (А также копирования внутренностей объекта и отдельног выделения памяти)
В PHP наверное надо использовать метод приведенный Ch_chov хотя на самом деле такое поведение неочевидно
4. eai - 30 Сентября, 2009 - 19:11:50 - перейти к сообщению
Спасибо, я как раз и хотел избежать клонирования объекта.
Спасибо за справку.

P.S.
вот блин ... три строчки написал и выдал в себе программиста на с++ Улыбка

 

Powered by ExBB FM 1.0 RC1