Добрый день Я переопеределил обработчики сессий и в них использую глобальный эклемпляр объекта для реализации работы с БД. Глобальный объект виден в открытии сессии, чтении данных, но почемуто не виден в записи и в закрытии сессии. Аналогичная скалярная глобальная переменная, видна из всех обработчиков сессий.
[vs] насколько я понял у него так PHP: <?php functon saveHandler() { global $db; } Олег по всей видимости к момету записывания данных инстанция уже уничтожена сборщиком мусора
Да, пример верный. Так вот если $db скалярная переменная, она успешно видна во всех процедурах, переопределяющих работу сессий. А если $bd объект, то он виден в процедурах открытия и чтения, но недоступен в процедурах записи и закрытия сессии, сборщик еще не должен порубить переменные. Да и чем в плане сборщика скаляр от объекта отличается, уничтожаютсято они в один заход сборщика. Проблема проявляется на php 5.2.4, но этот же код работал ранее на версиях 5.0.... (типа 5.0.4)
Вот раскопал в доках. Write and Close handlers are called after destructing objects since PHP 5.0.5. Thus destructors can use sessions but session handler can't use objects. In prior versions, they were called in the opposite order. It is possible to call session_write_close() from the destructor to solve this chicken and egg problem.