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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как коректно удалить обьект. 
:(
    Опции темы
Mushu
Дата 25.5.2009, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -2
Всего: -5



Перерыл книжки там не чего путного не нашел. У меня появились несколько вопросов :
1. как узнать сколько ссылок есть на данный обьект ?
2. как удалить эти ссылки
3. как вызвать деструктор в любом месте скрипта, разуметься после создание данного объекта, но не после завершение выполнение скрипта.

Я тут набросал пример в котором мне не получается удалить объект.


Код


class manager
{
    var $mass_obg;
    
}


class a
{
var $a;
static  $count;    
var $id;
 function __construct($obg_manager, $per)
 {
    
    
    $this->a = $per; 
    
    a::$count++;
    
    $this->id = a::$count; 
    
    $obg_manager->mass_obj[] =& $this;
    
 }


 
 function __destruct()
{
    
    
    unset($obg_manager->mass_obj);
    echo "обьект уничтоженн";
}
    
}



$manger = new manager();


for($i=0; $i < 4; $i++)
{
    $a[$i] = new a($manger, $i);
}

$a[1]->a = 333;
unset($a[2]);


когда уничтожаем обьект unset($a[2]); на него остается еще ссылка в  manager->mass_obj (а мы знаем что пхп __destruct() запустит тока тогда когда будут уничтожены все ссылки ), а если будут еще обьект. вот как раз хотел спросить как узнать сколько ссылок есть на уничтожающий объект ?
 

Это сообщение отредактировал(а) Mushu - 25.5.2009, 16:03
PM MAIL   Вверх
gta4kv
Дата 25.5.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


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

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



Цитата

Код

    unset($this);



smile smile smile
извините за оффтоп
PM MAIL   Вверх
Mushu
Дата 25.5.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -2
Всего: -5



Цитата(gta4kv @ 25.5.2009,  15:17)
Цитата

Код

    unset($this);



smile smile smile
извините за оффтоп

Где именно ? Если в  __destruct() то до этого участка кода  всеравно не доходит.

Это сообщение отредактировал(а) Mushu - 25.5.2009, 16:00
PM MAIL   Вверх
Mushu
Дата 26.5.2009, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -2
Всего: -5



Есть предложение ?
PM MAIL   Вверх
bars80080
Дата 26.5.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



не понятно, откуда manager->mass_obj , если объект уничтожен. какая связь manager->mass_obj  и $a[2]?
PM MAIL WWW   Вверх
Mushu
Дата 26.5.2009, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -2
Всего: -5



В том то и дело что он не уничтожен.
PM MAIL   Вверх
bars80080
Дата 26.5.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



исходя из чего сделан такой вывод?
PM MAIL WWW   Вверх
Mushu
Дата 27.5.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -2
Всего: -5



Идеи есть ? по уборке мусора ?
PM MAIL   Вверх
Mushu
Дата 27.5.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -2
Всего: -5



при отладки 
PM MAIL   Вверх
youri
Дата 28.5.2009, 04:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



по поводу кода: а если error_reporting(E_ALL); ini_set("display_errors", 1); добавить?

Цитата(Mushu @  25.5.2009,  10:23 Найти цитируемый пост)
когда уничтожаем обьект unset($a[2]); на него остается еще ссылка в  manager->mass_obj (а мы знаем что пхп __destruct() запустит тока тогда когда будут уничтожены все ссылки ), а если будут еще обьект. вот как раз хотел спросить как узнать сколько ссылок есть на уничтожающий объект ?

практическая ситуация, в которой это нужно? В данном случае лучше уничтожать объекты через менеджер, добавлять тоже лучше в менеджере, а не в конструкторе объекта - ты создаешь ненужные зависимости между объектами (высокая связанность/high coupling), а лучше их избегать

Это сообщение отредактировал(а) youri - 28.5.2009, 05:00
PM   Вверх
Serkys
Дата 28.5.2009, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вы, видимо, в PHP с C++ пришли.
В PHP5 отлично работает Garbage Collector, который сам удаляет объекты, на которые больше нет ссылок. К сожалению, от цикличных ссылок это не спасает (пока - в PHP5.3 проблема решена), но они встречаются редко.
PM MAIL   Вверх
Mushu
Дата 28.5.2009, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -2
Всего: -5



спс Я как раз думал о манагере обьектов, но как я понял в пхх еще нет данных инструментов, чтоб можно было посмотреть кто на кого ссылается.
PM MAIL   Вверх
youri
Дата 28.5.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



это обычно не нужно... по-крайней мере, я такие ситуации не придумал
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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