Такая бЯда. Можно ли как-нибудь сделать чтобы деструкторы отрабатывали строго в конце приложения точнее меня не устраивает PHP: <? class A{ function mz(){ $b=new b(); /* ... */ // $b destruct return; } } ?> впринципе я решил это при помоши загрузки класса через фабрику, но но но есть ли стандартные методы?
А чем не устраивает принудительный вызов в конце скрипта? PHP: <? // Script .. // Finishing $foo->__destruct(); $bar->__destruct(); // или $foobar->free($ob); // Метод free содержит вызов деструктора ?>
Дак как раз при принудительном вызове мы храним ссылку на объект для того, чтобы иметь возможность его вызвать. Тем более он будет вызван гарантированно, но в случае, если у нас дохрена этих ссылок, да ещё вложенных в сам объект, то .. то гарантировать, что деструктор будет вызван программно нельзя.
Apple он сам будет 2 раза вызываться я про PHP: А чем не устраивает принудительный вызов в конце скрипта? а если фабрика, деструктор вызовет сборщик мусора
Mr.M.I.T. Нужно хранить ссылку до конца скрипта. Без разницы где ты будешь ее хранить - в фабрике(тобишь локальной, живущей до конца области) или в глобальной области, если она дотянет то вызовется в конце. Можно как то конечно попробывать с функциями, которые выполняются после работы скрипта(не помню как там они декларируются), но все равно ссылку нужно сохранить будет. Больше никак.
я знаю что нужно хранить ссылку до конца хорошо перефразирую как сделать чтобы все ссылки автоматически хранились до конца
а нельзя у самого-самого прародителя открыть конструкт и прописать там один раз так? PHP: <?php __construct(){ self::$refs[]= $this; }
может есть какие-то команды, которые программно отключают сборщик мусора? тогда и ссылки хранить не надо.
Мне кажется, что если приложение так начинает зависеть от кода, то стоит потратить день-два, чтобы перепроектировать это место.
PHP: <?php class A{ function mz(){ if (!this->b) { $this->b =new b(); } $this->b->doSmth(); /* ... */ return; } } ?>
да уже так и сделал только через __get __set iliavlad нет не стоит, там всего-то для пары классов такое надо
PHP: <? class A { function Add() {} function Save(){} function __destruct(){ $this->Save(); } } ?> Проблема в том что мне лень каждый раз вручную вызывать Save =)