Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Class & Objects] композиция и ссылки, как передать объект по ссылке? 
:(
    Опции темы
BrutalizedProgrammer
Дата 19.1.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



собсна вот такой код на PHP4 (нужно передать объект по ссылке)
Код

class SomeClass {
    var $code = 0;
    function SomeMethod() {
        $this->code++;
    }
}
class MyClass {
    var $class;
    function MyClass($class) {
        $this->class = $class;
    }
}
$SomeClass = new SomeClass();
$MyClass = new MyClass(&$SomeClass);
$SomeClass->SomeMethod();
echo('$SomeClass->code = '.$SomeClass->code.'<br>');
echo('$MyClass->class->code = '.$MyClass->class->code.'<br>');

объект не передается по ссылке...
и так тоже не передается:
Код

...class MyClass {
    var $class;
    function MyClass(&$class) {
        $this->class = $class;
    }
}...

и даже если втыкнуть в обоих местах амперсанды, все равно не передается,
а просто копируется.
вроде все правильно написал и протестил,
дайте пожалуйста толковый совет.
PM MAIL ICQ   Вверх
GZep
Дата 19.1.2007, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: 8
Всего: 32



А в PHP вроде переменные не могут содержать сами объекты, а могут только ссылки на них...

А зачем:
Код

$MyClass = new MyClass(&$SomeClass);

тут как раз & не нужен...

Это сообщение отредактировал(а) GZep - 19.1.2007, 20:02


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
BrutalizedProgrammer
Дата 19.1.2007, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



кароче мне нужно, чтоб я работал с одним и тем же объектом 
в разных местах, а не с его копиями....
ну лан... меня все это напрягло...
нашел хостинг с PHP5, к черту 4 версию... мозги с ней поломать можна...
PM MAIL ICQ   Вверх
-=Ustas=-
Дата 20.1.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(GZep @  19.1.2007,  19:59 Найти цитируемый пост)
А в PHP вроде переменные не могут содержать сами объекты, а могут только ссылки на них...

Это только в пятом.
BrutalizedProgrammer, либо так
Код

class SomeClass {
    var $code = 0;
    function SomeMethod() {
        $this->code++;
    }
}
class MyClass {
    var $class;
    function MyClass(&$class) {
        $this->class = $class;
    }
}
$SomeClass = new SomeClass();
$MyClass = new MyClass($SomeClass);

Либо можешь так
Код

class SomeClass {
    var $code = 0;
    function SomeMethod() {
        $this->code++;
    }
}
class MyClass {
    var $class;
    function MyClass() {
        $this->class =& new SomeClass();
    }
}
$SomeClass = new SomeClass();
$MyClass = new MyClass();


или 
Код

class SomeClass {
    var $code = 0;
    function SomeMethod() {
        $this->code++;
    }
}
class MyClass {
    var $class;
    function MyClass() {
        
    }
}
$SomeClass = new SomeClass();
$MyClass = new MyClass();
$MyClass->class =& $SomeClass;

Но лучше конечно же на 5-ый перебираться


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
AztEK
Дата 20.1.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 6
Всего: 18



Цитата
Цитата
А в PHP вроде переменные не могут содержать сами объекты, а могут только ссылки на них...

Это только в пятом.

Не совсем так... В PHP4 и раньше значения всех типов сохранялись в специальной структуру zval Zend\'овского движка. Они могли хранить как простые значения (строки и числа), так и сложные (массивы и объекты).
Из-за этого и возникала проблема WTMA (Way Too Many Ampersands), когда для простейшего ООП-приложения надо было юзать чудовищное количество ссылок. С точки зрения программирования на PHP4 здесь все верно - как копируются строки, так должны и объекты (они одного типа по сути). Но опыт проектирования ООП-структур этому противоречил и в PHP5 ввели другую систему. Все переменные кроме объектов по прежнему хранятся в zval, а объекты хранятся в другом месте, так называемом Object Store и представляют собой, по сути, дескриптор (а не ссылку!) на структуру данных в этом хранилище. Т.е. теперь при присваивании обэекта он не копировался, а возвращался по ссылке как того и надо.


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Vaulter
Дата 20.1.2007, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



в PHP6 передача обьекта по ссылке будет считатся за ошибку => 
код все равно придется переделывать smile


--------------------
PM MAIL WWW ICQ   Вверх
GZep
Дата 20.1.2007, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: 8
Всего: 32



Цитата(AztEK @  20.1.2007,  16:44 Найти цитируемый пост)
Object Store и представляют собой, по сути, дескриптор (а не ссылку!) на структуру данных в этом хранилище

Ого... Как все запущено... Спасибо, это очень полезная инфа!


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.