диструктор

iceman

говнокодер
диструктор

php 5.2.5, apache 1.3

есть ли глюк (в данной версии), а возможно опция настройки, который вызывает диструктор....????

только что с БД мучался, потомучто диструктор исполнялся... так же ща другие тупости начались переменные которые должны быть, принимают значение NULL

(только не говорите про register_globals :) )
 

iceman

говнокодер
во всех классах которые я подгрузил и инициализировал, и где есть __destruct, везде вызывается сам по себе этот диструктор еще до конца скрипта.... хотя негде явно не диструктивирую не один объект...
 

surg30n

Новичок
дЕЕЕструктор. млять, по-русски научись сначала кодить..
 

surg30n

Новичок
BigWindow
Это элементарное неуважение к собственному языку.

Топикстартеру -
ну вставь ты в свой деструктор
PHP:
debug_print_backtrace();
die;
и смотри откуда ноги растут.
 

maxwell

artifex
surg30n, а слова «топикстартер», «деструктор», две точки в конце предложения, дефис вместо тире — это «риспект и уважуха» к своему языку? И кто вообще сказал что его язык русский?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
во всех классах которые я подгрузил и инициализировал, и где есть __destruct, везде вызывается сам по себе этот диструктор еще до конца скрипта.... хотя негде явно не диструктивирую не один объект...
Это документированное поведение. _Все_ деструкторы вызываются перед завершением скрипта.

maxwell, а еще есть хорошая фраза, «дурак не заметит, умный - промолчит» ;)
 

Krishna

Продался Java
surg30n
Посты с безграмотным русским как правило отлично выявляют наиболее "трудных" в восприятии нубов, которым отвечать - как правило лишь терять собственное время. Ну не приспособлены люди к освоению языков. В глобальном смысле...

-~{}~ 31.07.08 21:04:

Я к тому, что ругаться бесполезно - проще игнорить таких.
 

iceman

говнокодер
Автор оригинала: флоппик
Это документированное поведение. _Все_ деструкторы вызываются перед завершением скрипта.

maxwell, а еще есть хорошая фраза, «дурак не заметит, умный - промолчит» ;)
а я о чем и говорю, должен вызыватся перед завершением, а не в середине... епт

-~{}~ 01.08.08 07:08:

surg30n
ты такая умная, да?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
«середина» - это не место в скрипте. Это место «где-то там»... Дебажить, дебажить тогда.
 

iceman

говнокодер
я понимаю звучит это глупо...

-~{}~ 01.08.08 07:33:

#0 Database->__destruct() called at [/pub/home/sy/mainfile.php:73]

69 по 73 строки mainfile.php
PHP:
    object::$db = new Database($config_db['hostname'],
                               $config_db['dbname'],
                               $config_db['username'],
                               $config_db['userpass'],
                               $config_db['charset']);
а именно 73 строка это
PHP:
$config_db['charset']
-~{}~ 01.08.08 07:35:

а вот конструктор класса:
PHP:
    public function __construct($host, $databasename, $username, $userpass, $charset, $persistency = FALSE)
    {
        $this->persistency = $persistency;
        $this->server      = $host;
        $this->dbname      = $databasename;
        $this->user        = $username;
        $this->password    = $userpass;

        if($this->persistency){
            $this->db_connect_id = @mysql_pconnect($this->server, $this->user, $this->password);
        } else {
            $this->db_connect_id = @mysql_connect($this->server, $this->user, $this->password);
        }
        
        if($this->db_connect_id){
            if($this->dbname != ''){
                $dbselect = @mysql_select_db($this->dbname);
                
                if(!$dbselect){
                    @mysql_close($this->db_connect_id);
                    $this->db_connect_id = $dbselect;
                }
            }
            $this->sql_set_charset($charset);
            
            return $this->db_connect_id;
        } else {
            return FALSE;
        }
    }
-~{}~ 01.08.08 07:37:

PHP:
    public function sql_set_charset($charset){
        $this->sql_query('SET NAMES ' . $charset);
    }
-~{}~ 01.08.08 07:38:

PHP:
    public function sql_query($query = '')
    {
        // Remove any pre-existing queries
        $this->query_result = '';
        if($query != ''){
            $this->query_result = mysql_query(trim($query), $this->db_connect_id);
        }
        
        if($this->query_result){
            unset($this->row[$this->query_result]);
            unset($this->rowset[$this->query_result]);
            
            return $this->query_result;
        } else {
            return FALSE;
        }
    }
 

Wicked

Новичок
везде вызывается сам по себе этот диструктор еще до конца скрипта.... хотя негде явно не диструктивирую не один объект...
ты так говоришь, будто это все возможные варианты. Деструктор, если определен, запускается всегда, когда пропадают все ссылки на некий объект. В частности, это может происходить при автоматическом убивании локальных переменных при выходе из функции, при рекурсивном убивании композитных объектов, и т.д.

-~{}~ 01.08.08 10:53:

а именно 73 строка это
$config_db['charset']
Неверно. 73 строка это "$config_db['charset']);"

object::$db = new Database($config_db['hostname'],
$config_db['dbname'],
$config_db['username'],
$config_db['userpass'],
$config_db['charset']);
отлично :)
а что будет, если у тебя в object::$db к этому моменту УЖЕ есть объект? Правильно, у него отберется последняя ссылка, и он начнет умирать.
 

iceman

говнокодер
выше я написал же, видишь деструктор вызывается сразу же после
PHP:
object::$db = new Database($config_db['hostname'], 
                               $config_db['dbname'], 
                               $config_db['username'], 
                               $config_db['userpass'], 
                               $config_db['charset']);
так же щас нашел еще такое:
PHP:
<?
object::$link['TplController'] = $TplController = new Module(new TplParser, new TplController_Tpl_Error);

$TplController->Vars['SYS']['DATE']     = getdate();
object::$link['TplController']->Vars['PLUGIN'] = 'xz';

/*по идее, object::$link['TplController'] и $TplController один и тот же объект, т.е. ктото из них ссылка (php5)*/

?><pre><?
    print_r($TplController->Vars);
?><br><?
    print_r(object::$link['TplController']->Vars);
?>
и в этоге, это разные переменные... в одном хранится одно, в другом другое, на локалке - это одна переменная, другая ссылка...

делаю так и все работает:
PHP:
    object::$link['TplController'] = new Module(new TplParser, new TplController_Tpl_Error);
    
    $TplController =& object::$link['TplController'];
какую опцию чтоли нада включить чтобы работало ????
PHP:
object::$link['TplController'] = $TplController = new Module(new TplParser, new TplController_Tpl_Error);
 

Wicked

Новичок
это уже к tony2001 .-)
потому что лично для меня это все в пхп5 кажется фантастикой.
 
Сверху