как получить ссылку на объект, а не на копию в $this

Gifik

Новичок
как получить ссылку на объект, а не на копию в $this

Возник вот такой интересный вопрос.

Используя в методах объекта $this мы по сути используем копию данного объекта в памяти, которой потом заменяется исходный объект.

Но можно ли как-то получить ссылку именно на вызывающий объект?

Для наглядности такой пример:

PHP:
// создаем массив, где хотим хранить ссылки на все созданные объекты класса test
$copy = array();

class test {
    var $field;

    function test() {
        global $copy;
        // добавляем ссылку на объект (но по сути на копию объекта)
        $copy[] = &$this;
        
        // присваиваем любое значение
        $this->field = 'test value';
    }
}

$testObject = new test();

// присваиваем новое значение
$testObject->field = 'new test value';

print $copy[0]->field; // выведет test value, т.к. в $copy[0] не стоит ссылка на объект, а на его копию, которая была в $this
 

Gifik

Новичок
fixxxer, спасибо.

1) да, так работает, но мне все же интересно, можно ли подобный результат получить без "&new", а изменив что-то в конструкторе класса?

2) почему пишу на php4 - хочется для моего скрипта большей совместимости (хотя, не факт, что все будет работать также в php5) :)
 

Gifik

Новичок
jonjonson
а чем глупо использовать global?

Тогда опишу проблему, быть может, подскажете лучшее решение.

По ходу выполнения скрипта создаются объекты класса, в некоторых из которых будет в поле active записано true.

Далее в методе другого класса мне надо иметь доступ ко всем объектам, в которых свойство active == true.

Как мне организовать список, в котором можно получить доступ к данным объектам, не используя ссылки и global (если это глупо)?
 

fast2111

Новичок
если в лоб, то в рамках одной абстракции плоди другие объекты и записывай их в массив... (что-то вроди фабрики :) )

>>По ходу выполнения скрипта создаются объекты класса, в некоторых из которых будет в поле active записано true.

А что за задача?

P.S. не надо php4. если php то php5, если ООП то php5
 

fixxxer

К.О.
Партнер клуба
>>1) да, так работает, но мне все же интересно, можно ли подобный результат получить без "&new", а изменив что-то в конструкторе класса?


нет.
представь себе что new test() это прямой вызов конструктора (в некотором приближении можно так и считать) и все станет ясно
 

jonjonson

Охренеть
Gifik, если вы что-то хотите иметь везде - означает, что вы не знаете где и зачем оно нужно. Вы не знаете назначение объекта. Структура приложения не определена. Короче, полный бардак. :)
 
Сверху