session_set_save_handler garbage collection meghívása singleton esetén

Sziasztok!

Nem tartom kezdő programozónak magam mégis felmerült bennem egy kérdés, hogy miként fogja az eredeti session garbage collectiont kezelő program megtalálni és futtatni az általam session_set_save_handler -ben megadott garbage collection kezelő metódust ha singleton a session kezelő osztályom:


<?php
class Session
{
	private static $Instance=__CLASS__;

	public static function getInstance()
	{
		if( !is_object(self::$Instance) )
		{
			self::$Instance = new self::$Instance();
		}

		return self::$Instance;
	}
	
	private function  __construct()
	{
		ini_set('session.save_handler','user');
		session_set_save_handler(
		    array(&$this,'open'),
		    array(&$this,'close'),
		    array(&$this,'read'),
		    array(&$this,'write'),
		    array(&$this,'destroy'),
		    array(&$this,'garbage_collection'));
		session_start();
	}
	
	public function garbage_collection( $iLifeTime=null )
	{
		// Hulldékgyüjtő kód
	}
}
?>

Hozzászólások

Ne agyaljatok megvan, hogy miként történik mindez! :) Félreértettem a működését. A user által definiált
garbage_collection is akkor hívódik meg amikor lehívják az oldalt, csak nem minden lehívásnál. Ennek mennyiségét egy 1-100 -ig terjedő szám adja meg ami %-ban értendő.

"A program is never done! by atman"

Természetesen simán működik, le van tesztelve. De a garbage collection-ról megvan a véleményem. Úgyérzem hatásosabb ha az ember ír egy háttér feldolgozót ami elvégzi ezt a feladatot megbízhatóbban.

"A program is never done! by atman"

Szia!

A kod egyaltalan meghivodik valamikor? Mert ha az osztaly inicializalodik, onnantol kezdve mar nincs gond, az objektumreferencia alapjan a runtime tudja, melyik objektumra hivatkozzon (ami neked $this, az neki mas objektumreferencia).

Egy Session::getInstance(); hívásra lefut a konstruktor ezzel beregisztrálja a sessionkezelőket. Ezután az objektum referencia az amelyik a $this is volt elmentődik a korábban az osztály nevét tartalmazó statikus változóba. Soha többet nem fut le a konstruktor a php process alatt. A legközelebbi $oSession=Session::getInstance(); hívásra a statikus metódus a korábban elmentett referenciát adja vissza.

"A program is never done! by atman"