![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
WolfAlone |
|
|||
![]() В экстазе ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1010 Регистрация: 16.9.2008 Где: Рай Репутация: 1 Всего: 5 |
Добрый день! Вношу изменения в проект на Codeigniter 2.0.
Немного переписал контроллер, для удобства:
При использовании функции ВНЕ деструктора - всё работает отлично. При попытке перенести её в деструктор - возникает "Ошибка 500". Можно это как-то исправить? -------------------- И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!" Ф топку Ubuntu, Debian наше фсё! (с) Евгений Вольф |
|||
|
||||
SneG0K |
|
|||
![]() Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 7 Всего: 54 |
Как минимум для начала включить вывод ошибок и прочитать, что там написано.
|
|||
|
||||
WolfAlone |
|
||||||
![]() В экстазе ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1010 Регистрация: 16.9.2008 Где: Рай Репутация: 1 Всего: 5 |
Написано, что вот эта функция не может найти файл (include error)
Хотя, файл там есть 100%. Сделал проще. Открыл строку где вызывалась эта функция, закомментировал её... Ошибки больше нет, но теперь деструктор просто НЕ работает. То есть:
Добавлено через 3 минуты и 6 секунд Точнее будет сказать, деструктор сам по себе вообще работает, например:
Работает как надо! А вот, код приведённый выше не работает. Причём не работает он исключительно в деструкторе! -------------------- И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!" Ф топку Ubuntu, Debian наше фсё! (с) Евгений Вольф |
||||||
|
|||||||
WolfAlone |
|
|||
![]() В экстазе ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1010 Регистрация: 16.9.2008 Где: Рай Репутация: 1 Всего: 5 |
Уважаемые коллеги, никто и никогда не пытался править чужие проекты на CI 2.0 (или создавать свои) или просто никто и никогда не использовал в CI 2.0 деструкторы?
P.S. Начинаю подозревать, что как только программист доходит до полного понимания ООП и деструкторов в частности - он переходит на более продвинутый FW... ![]() Это сообщение отредактировал(а) WolfAlone - 14.6.2011, 00:07 -------------------- И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!" Ф топку Ubuntu, Debian наше фсё! (с) Евгений Вольф |
|||
|
||||
Shogun |
|
|||
![]() сёгун-сан ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 8.6.2006 Где: Кишинёв Репутация: 9 Всего: 11 |
Попробуйте через try / catch словить ошибку в деструкторе и записать в лог фаил, может что-то прояснится.
Можно также сохранить дамп на $this и проверить может чего не хватает. А вообще ошибка 500 это "Internal Server Error - Внутренняя ошибка сервера", непонятно как она может тут вылезть. -------------------- 2b || !2b |
|||
|
||||
MoLeX |
|
||||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
destruct - происходит во время уничтожения класса. Причем, самый ранний класс уничтожится самым первым.
Пример
в итоге получим
Соответственно твой код не будет работать, если уже завершилось ядро фр-ка, а оно уже завершилось ![]() -------------------- Amazing ![]() |
||||
|
|||||
WolfAlone |
|
|||
![]() В экстазе ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1010 Регистрация: 16.9.2008 Где: Рай Репутация: 1 Всего: 5 |
MoLeX, спасибо большое!
P.S. Чем больше работаю с CodeIgniter (в большинстве случаев по необходимости, а не по собственному желанию) - тем меньше он мне нравиться! -------------------- И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!" Ф топку Ubuntu, Debian наше фсё! (с) Евгений Вольф |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
имхо, так поведут себе большинство фр-ков
Это сообщение отредактировал(а) MoLeX - 14.6.2011, 12:21 -------------------- Amazing ![]() |
|||
|
||||
SneG0K |
|
|||
![]() Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 7 Всего: 54 |
Хм, вот сейчас столкнулся с такой-же ситуацией, у меня класс User в методе __destruct() должен был сохранять свои настройки в базу, но по-скольку класс адаптер к БД уже уничтожен, то вылетает ошибка.
Как тогда поступать в такой ситуации? Использовать какой-то метод, который будет вызываться до деструктора? Я думаю это большое упущение PHP в целом, а не конкретного фреймворка(хотя кто его знает, может это и плюс). Это сообщение отредактировал(а) SneG0K - 16.6.2011, 08:13 |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
почему же? SneG0K, WolfAlone, есть решение в лоб - объявить перед всеми классами свой, в котором и делать деструктор. Но это не красиво Добавлено через 4 минуты и 27 секунд может стоит глянуть на альтернативу? http://ru2.php.net/register_shutdown_function -------------------- Amazing ![]() |
|||
|
||||
SneG0K |
|
|||
![]() Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 7 Всего: 54 |
MoLeX, ты Бетмен
![]() |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
![]() -------------------- Amazing ![]() |
|||
|
||||
WolfAlone |
|
|||
![]() В экстазе ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1010 Регистрация: 16.9.2008 Где: Рай Репутация: 1 Всего: 5 |
В CI 2.0 нет случайно какого-нибудь хука, для вызова некоей функции, которая бы выполнила роль деструктора?
-------------------- И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!" Ф топку Ubuntu, Debian наше фсё! (с) Евгений Вольф |
|||
|
||||
systemIV |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 28.3.2011 Репутация: -1 Всего: -1 |
Насколько мне известно в CI только недавно появилась поддержка php5. Возможно там деструкторы ещё не реализованы
|
|||
|
||||
WolfAlone |
|
||||||||
![]() В экстазе ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1010 Регистрация: 16.9.2008 Где: Рай Репутация: 1 Всего: 5 |
Последнее время (около года), в случае необходимости использования FW - мы применяем Yii и некоторые другие фреймворки (CodeIgniter не входит в их список). В них необходимости использования деструкторов либо не возникает вообще, либо этой проблемы не существует, либо для неё есть решение средствами самого FW. То есть, в данный момент "проблема деструкторов" лично для меня существует только в CodeIgniter, а так как проекты переписывать не очень хочется (иногда они бывают реально "не маленькие") - приходится решать проблему именно в рамках данного FW. На данный момент "извращения" дошли до того, что пришлось написать свои функции для рендеринга (т.к. в CI нет такого понятия как "layout"). И постоянно вызывать функцию типа:
что крайне не удобно, в виду чего я и хотел засунуть её в деструктор... *но из этого ничего не вышло. И это лишь одна из "проблем" встречающаяся в этом FW (*лично для меня).
Я бы сказал не "появилась поддержка PHP-5", а скорее "исчезла поддержка PHP-4"... Деструкторы "там" реализованы, но в деструкторе нельзя вызывать ничего, что касается самого CI, то есть функции CI в деструкторе использовать нельзя. Например:
за то
-------------------- И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!" Ф топку Ubuntu, Debian наше фсё! (с) Евгений Вольф |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |