Обновить
0
0
Кирилл Березин@Offenso

Пользователь

Отправить сообщение
так сложилось. почему бы и нет?
как это вообще связанно с сабжем?
хорошо, а что вы скажете на
function bla_bla()
{
$a = new dummy();
{ // можно пустые оставить, можно if, for etc.
$b = new dummy();
}
}

В каком порядке по вашему логично их удалять?
Мне кажется очевидным что сначала следует отчистить $b, затем $a.
Вы можете проверить, в пхп это не так.
уничтожать объекты по моему логично только когда исключается возможность работы с ними. это происходит только во время покидания области видимости.
я объект не уничтожал, и хочу с ним работать. обьект пропал. схчегобы?
я уже признал свою ошибку. я не думал что там есть сборщик мусора времени исполнения.
думал что переменные очищаются согласно логике локальных переменных в спп, обьекты когда теряются все ссылки и прочее.
а если смотреть на пхп с этой стороны, то деструкторы не такая плохая вещь.

сейчас даже и не знаю что делать.
это меня не задевает. меня выводит из равновесие нежелание разработчиков признать свои ошибки и исправить код.
а то получается как в том анекдоте. «у вас не работает такая то кнопка если открыть фаил с таким расширением.» в следующем патче приходит ответ «поддержка вот такой функции для файлов такого типа приостановлена»
про сборщик мусора я ничего не слышал. в срочном порядке убежал ознакомиться, может чего откопаю и добавлю в публикацию. спасибо.
Смотрите. Есть обьект SCREEN. Это подсистема страниц экранов (аля дос). Отдельно рисуется лог (который дампится в фаил), отдельно то что видет юзер, отдельно скажем каллстек и отдельно команды js библиотеке, которые в конце переводятся в json и дампятся в какой нибудь див. Надеюсь назначение ясно.
Все поля protected, все паблик методы — static. Экземпляры создаются (детьми), для какой то определенной цели. В коде деструктора ничего не зануляется, он пустой.
— Пусть есть некоторый обьект $DUMMY. В деструкторе он хочет сделать что то типа SCREEN::AddToErrorLog($text);
— $ScreenErrorLog был создан раньше $Dummy.
Таким образом ссылок на экран нет. Но он был создан раньше, и нигде не удалялся. Значит логично предположить что он существует. Увы, нет. Скрипт выдает что то типа «ребенок уже был завершен, все что должен был вывел куда нужно, и теперь только в режиме рид онли».
Может быть немного коряво, но суть, что обьекты должны удаляться в порядке обратном созданию, до тех пор пока ссылки не требуют обратного. А в пхп они удаляются в прямом порядке.
я и не пытался. я просто решаю задачи в ООП стаил. деструкторы по мне это удобная штука управления обьектами. так же как и конструкторы.
я не возмущаюсь что там нет копирования, типизации, перегрузок и прочих радостей жизни.
но дядя сказал «поддерживаю», значит должен поддерживать. а внезапный конфуз «поддерживаю, но не так как велит разум» смущает.
(Если вы только про Unknown:0, меня бы вполне устроило «exceptions in destructors not allowed (object BlaBla)»)
К примеру меня убивают строки «Destructor order is not guaranteed to be deterministic.»
последнее время читал блог пхп, и поражался насколько простые вещи пишут. что то вроде «использование классов», «наследование». подумал почему бы нет. к тому же подобной информации нигде не найти, дак может кому то пригодится. ведь поведение движка совершенно неадекватное и нелогичное.
и самое обидное исправления затрагивают только документацию.
Я привел пример когда эксепшен бросается неявно.
Аналог в плюсах — обращение к нулевой памяти в деструкторе. Мы кидали исключение? нет. Но мы можем его поймать и увидеть, что тут где то указатель занулился. А не «Unknown:0»
12 ...
14

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Зарегистрирован
Активность