| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Codeigniter 2.0 и Деструкторы |
| Автор: WolfAlone 10.6.2011, 18:40 | ||
| Добрый день! Вношу изменения в проект на Codeigniter 2.0. Немного переписал контроллер, для удобства:
При использовании функции ВНЕ деструктора - всё работает отлично. При попытке перенести её в деструктор - возникает "Ошибка 500". Можно это как-то исправить? |
| Автор: SneG0K 11.6.2011, 10:14 |
| Как минимум для начала включить вывод ошибок и прочитать, что там написано. |
| Автор: WolfAlone 13.6.2011, 00:17 | ||||||
Написано, что вот эта функция не может найти файл (include error)
Хотя, файл там есть 100%. Сделал проще. Открыл строку где вызывалась эта функция, закомментировал её... Ошибки больше нет, но теперь деструктор просто НЕ работает. То есть:
Добавлено через 3 минуты и 6 секунд Точнее будет сказать, деструктор сам по себе вообще работает, например:
Работает как надо! А вот, код приведённый выше не работает. Причём не работает он исключительно в деструкторе! |
| Автор: WolfAlone 14.6.2011, 00:07 |
| Уважаемые коллеги, никто и никогда не пытался править чужие проекты на CI 2.0 (или создавать свои) или просто никто и никогда не использовал в CI 2.0 деструкторы? P.S. Начинаю подозревать, что как только программист доходит до полного понимания ООП и деструкторов в частности - он переходит на более продвинутый FW... |
| Автор: Shogun 14.6.2011, 01:14 |
| Попробуйте через try / catch словить ошибку в деструкторе и записать в лог фаил, может что-то прояснится. Можно также сохранить дамп на $this и проверить может чего не хватает. А вообще ошибка 500 это "Internal Server Error - Внутренняя ошибка сервера", непонятно как она может тут вылезть. |
| Автор: MoLeX 14.6.2011, 06:31 | ||||
| destruct - происходит во время уничтожения класса. Причем, самый ранний класс уничтожится самым первым. Пример
в итоге получим
Соответственно твой код не будет работать, если уже завершилось ядро фр-ка, а оно уже завершилось |
| Автор: WolfAlone 14.6.2011, 11:16 |
| MoLeX, спасибо большое! P.S. Чем больше работаю с CodeIgniter (в большинстве случаев по необходимости, а не по собственному желанию) - тем меньше он мне нравиться! |
| Автор: MoLeX 14.6.2011, 12:20 |
| имхо, так поведут себе большинство фр-ков |
| Автор: SneG0K 16.6.2011, 08:13 |
| Хм, вот сейчас столкнулся с такой-же ситуацией, у меня класс User в методе __destruct() должен был сохранять свои настройки в базу, но по-скольку класс адаптер к БД уже уничтожен, то вылетает ошибка. Как тогда поступать в такой ситуации? Использовать какой-то метод, который будет вызываться до деструктора? Я думаю это большое упущение PHP в целом, а не конкретного фреймворка(хотя кто его знает, может это и плюс). |
| Автор: MoLeX 16.6.2011, 08:17 |
почему же? SneG0K, WolfAlone, есть решение в лоб - объявить перед всеми классами свой, в котором и делать деструктор. Но это не красиво Добавлено через 4 минуты и 27 секунд может стоит глянуть на альтернативу? http://ru2.php.net/register_shutdown_function |
| Автор: SneG0K 17.6.2011, 05:12 |
| MoLeX, ты Бетмен |
| Автор: MoLeX 17.6.2011, 06:51 |
| |
| Автор: WolfAlone 2.7.2011, 15:42 |
| В CI 2.0 нет случайно какого-нибудь хука, для вызова некоей функции, которая бы выполнила роль деструктора? |
| Автор: systemIV 2.7.2011, 20:02 |
| Насколько мне известно в CI только недавно появилась поддержка php5. Возможно там деструкторы ещё не реализованы |
| Автор: systemIV 3.7.2011, 11:41 | ||
просто используй yii |
| Автор: WolfAlone 3.7.2011, 15:23 |
Дело в том, что я и так не редко использую в т.ч. и YII (о чём я собственно и писал выше). Но, переносить готовый проект солидного размера с CI на YII или другой FW... - занятие мало рациональное. |