![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| redlinesoft |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.8.2005 Репутация: нет Всего: нет |
Сейчас занимаюсь разработкой CMS на php5. Написал класс управления модулями, оформленных так же в виде классов.
Этот класс имеет две функции, в которых необходимо создать новый экземпляр модуля. Но при тесте получил error с тектом: Fatal error: Cannot redeclare class modulconfig_123 in y:\home\wd\www\admin\modules\123\config.php on line 3 Так вот: кто-нибудь подскажите, как уничтожить экземпляр класса, если он ужн не нужен. |
|||
|
||||
| GiV |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 13.7.2006 Где: rus|53 Репутация: нет Всего: 9 |
Здраствуйте,
У Вас проблема не в том что у Вас создан экземпляр класса, а в том, что Вы пытаетесь еще раз подключить файл с описанием класса. Экземпляров класса в программе может быть сколь угодно много, а вот его декларация (описание) только одна. Скорее всего Вы используете конструкции require или include. Стоит отказаться от них раз у Вас появляется такая ошибка и воспользоваться аналогами require_once и include_once. Так же стоит обратить внимание на __autoload() очень помогает при работе с классами в PHP 5! |
|||
|
||||
| redlinesoft |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.8.2005 Репутация: нет Всего: нет |
И правда! Спасибо огромное! =)
|
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Уничтожение происходит автоматически после того как теряется последняя ссылка на класс.
|
|||
|
||||
| Drache |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 31.3.2006 Репутация: нет Всего: 3 |
в каком смысле? По-моему такой метод применяется в яве, а о пхп ничего подобного не слышала. Хотя может просто не вчитывалась .... но не слышала такого все же. Плюс Ваш пример ничего относительно ссылок не показывает абсолютно. Если говорить об уничтожении объекта после того как теряется последняя ссылка (причем на объект, а не на класс), то здесь может быть такой пример:
но это так, лирическое отступление 1. по окончанию выполнения скрипта. 2. вручную - через unset например, ну т.е. как обычная переменная. я в чем-то неправа? |
||||
|
|||||
| SamDark |
|
|||
|
Добрый кот ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1424 Регистрация: 25.7.2006 Где: Voronezh Репутация: нет Всего: 38 |
Drache
Права насчёт 1 и 2. -------------------- rmcreative.ru — Это жжж неспроста... yiiframework.ru — О фреймворке Yii на русском. reggi — здесь я регистрирую домены |
|||
|
||||
| Mal Hack |
|
||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Это - ошибка проектирования. Зачем делать еще один экземпляр класса, если уже один есть? Лишняя память и т.п.
Ты не уничтожаешь объект. Переменная $obj содержит ссылку на объект. Присваивая указателю null ты всего лишь удаляешь ссылку, но сам объект в памяти СКОРЕЕ ВСЕГО ОСТАЕТСЯ (уточнить могут только ребята из zend'a). При использовании unset должна очищаться и память и удаляться ссылка. |
||||
|
|||||
| Endeveit |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 2.6.2006 Репутация: нет Всего: 7 |
Mal Hack, Aliance дал почти правильный пример. Единственный минус примера в том, что он синтаксически неверно написан: надо не class Test(), а class Test.
Так же из примера видно, что $test- это последнее упоминание о классе Test, после того, как мы обнулили её, пхп автоматически уничтожил объект. Это механизм работы с объектами в 5й версии пхп. unset в данном случае работает так же как и присваивание переменной, содержащей объект, значения NULL. Более подробно можно почитать на Zend.com Это сообщение отредактировал(а) Endeveit - 29.7.2006, 16:28 |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Дай линк. Что-то я тут подумал, и кажется мне что меня проглючивает. null в сях, к примеру, очищает память, если больше на эту область памяти никто не ссылается. А если ссылкаются, т.е. у нас есть объект и ссылка на него, то будет удалена ссылка того, кудапишем null. Думаю тут работает также. И посему null не всегда "убъет" память... |
|||
|
||||
| Endeveit |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 2.6.2006 Репутация: нет Всего: 7 |
Mal Hack, тебя проглючивает
з.ы. не могу найти точную ссылку, но видел где-то в этом районе. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Extensions | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |