Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов деструктора 
V
    Опции темы
iexx
Дата 1.10.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.9.2007
Где: Gomel, BY

Репутация: нет
Всего: нет



Ребят, можете прояснить ситуацию. Почему в нижеприведённом коде не срабатывает деструктор. Причем не срабатывает даже если раскомментивать две строки. ( т.е. создавать экземпляр от текущего класса).  Явного конструктора нет, но есть примеры, где работает прекрасно и без него.
Да и если его поставить, то тоже ничего хорошего не будет. ;(

Вообще больше необходимо вызвать деструктор вот этого экземпляра (self::$object_instance  = new $class($params);), но и он не срабатывает ;(

В чем может быть проблема?

Код


class Logger_class {

  private static $object_instance = null;
//private static $object_instance1 = null;


    public static function Log($message, $params = array()) {

        // Get reference
        if (is_null(self::$object_instance)) {

            switch (LOG_STORAGE) {
             case 'TXT':

                 $class = 'Logger' . LOG_STORAGE . '_class';

                 self::$object_instance  = new $class($params);
                 //self::$object_instance1 = new self;
                 break;

            }

        }

        self::$object_instance->Log($message);
    }

    public function __destruct() {
        // DoSome
    }
}

Logger_class::Log('variable A');


PM MAIL WWW ICQ   Вверх
mishaSL
Дата 1.10.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 54



Цитата(iexx @  1.10.2007,  20:22 Найти цитируемый пост)
В чем может быть проблема?

Конструктор и деструктор вызывается только при создании объекта от это класса. При использовании статических методов без инициализации объекта  конструктор и деструктор НЕ будет вызываться.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
iexx
Дата 1.10.2007, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.9.2007
Где: Gomel, BY

Репутация: нет
Всего: нет



Цитата(mishaSL @  1.10.2007,  20:44 Найти цитируемый пост)
Конструктор и деструктор вызывается только при создании объекта от это класса. При использовании статических методов без инициализации объекта  конструктор и деструктор НЕ будет вызываться. 

Да, но там у меня есть строка вот такая закоментированная:
self::$object_instance1 = new self;
т.е. инстанцирование происходит от этого же класса. Да, у меня используется статический метод, но ведь инициализация была проведена и объект храниться в аттрибуте.
+ ко всему:  new $class($params);
когда я тут создаю новый экзмепляр, то у него ведь тоже есть деструктор, который тоже не вызывается ;(
PM MAIL WWW ICQ   Вверх
mishaSL
Дата 1.10.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 54



Цитата(iexx @  1.10.2007,  20:59 Найти цитируемый пост)
self::$object_instance1 = new self;

Конструктор и деструктор должен вызываться:
Пример:
Код

<?php

class A {
    public static $ob;
    public function __construct()
    {
        print 'BEGIN ';
    }
    
    public static function A_a()
    {
        self::$ob = new self;        
        print 'OK ';
    }
    
    public function __destruct()
    {
        print 'END ';
    }   
    
}

A::A_a();

?>



Цитата(iexx @  1.10.2007,  20:59 Найти цитируемый пост)
+ ко всему:  new $class($params);
когда я тут создаю новый экзмепляр, то у него ведь тоже есть деструктор, который тоже не вызывается ;( 

А должен если объект создается.


Но вам не кажется что у вас малость запутанная структура...


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
iexx
Дата 1.10.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.9.2007
Где: Gomel, BY

Репутация: нет
Всего: нет



оопс.
 у меня пример вышеприведённый не отработал( опять таки не сработал деструктор)

Код

$a = new A;

Только так сработал ;(

Добавлено через 1 минуту и 10 секунд
мм, бред какой-то, срабатывает через раз ;)
PM MAIL WWW ICQ   Вверх
mishaSL
Дата 1.10.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 54



Цитата(iexx @  1.10.2007,  21:31 Найти цитируемый пост)
у меня пример вышеприведённый не отработал( опять таки не сработал деструктор)

Посмотри какая версия PHP потом здесь (bugs.php.net) посмотри, может просто версию PHP обновить надо.

И еще ИМХО, лучше вместо:
Код

new self;
 

делать так:
Код

new A();// к примеру A, вместо A название класса



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
iexx
Дата 1.10.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.9.2007
Где: Gomel, BY

Репутация: нет
Всего: нет



ок, спасибо.
 Я ещё посмотрел, у меня дебаггер не всегда верно отрабатывает, ну да ладно с ним.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1003 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.