php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.06.2005, 23:51  
Gast
 
Beiträge: n/a
Standard [Erledigt] session wrapperklasse

guten abend board, ich bin dabei eine session wrapperklasse für die in php eingabeuten sessions zu schreiben. leider funktioniert das nicht so, wie ich mir es vorstelle. nach langem hin und her will ich meine frage mal in diesem board hier stellen:

class.session.php:
PHP-Code:
<?php

    
class Session {

        private 
$data = array();

        private static 
$singleInstance null;
        public static function 
getInstance() {
            if (
is_null(self::$singleInstance)) {
                
self::$singleInstance = new Session();
            }
            return 
self::$singleInstance;
        }


        protected function 
__construct($sessionName '') {
            
session_name($sessionName);
            
session_start();
            if (isset(
$_SESSION['__objectStore'])) {
                
$this->data $_SESSION['__objectStore'];
            }
            print (
'konstruktor called'."\n");
        }

        public function 
store($name$object) {
            
$this->data[$name] = $object;
            print (
$object.' stored as '.$name."\n"); 
        }

        public function 
get($toGet) {
            return 
array_key_exists($toGet$this->data) ? $this->data[$toGet] : null;
        }

        public function 
__destruct() {
            
$_SESSION['__objectStore'] = $this->data;
            
session_write_close();
            print (
'detruktor called'."\n");
        }
    }

?>
hier ein test, mit dem ich die klasse teste:
PHP-Code:
<?php

    
class foo {
        private 
$bar '';
        public function 
__construct($bar) { $this->bar $bar; }
        public function 
set($bar) { $this->bar $bar; }
        public function 
get() { return $this->bar; }
        public function 
__toString() { return $this->bar; }
    }

    
header ('Content-Type: text/plain');

    
$session Session::getInstance();
    
$session->store('foo', new foo('dies ist ein test'."\n"));
    echo 
$session->get('foo');

    
print_r($session);
?>
der code von beiden files ist auf das nötigste beschränkt, unnötige funktionen hab ich mir erlaubt 'rauszuschneiden'

wenn ich das test-script so laufen lasse wird das foo-objekt nicht in der session gespeichert, bzw. ist beim nächsten start des skriptes (mit auskommentiertem $session->store('foo', ...) ) nicht mehr verfügbar.

ich habe nun wirklich lange rumge(tüft|goog)elt und hoffe, dass hier einer ne kleine idee hat.

vielen dank
hautzi
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 29.06.2005, 11:11  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Ich denke da der Destructor vom GarbageKollector abgearbeitet wird existiert die Session zum Zeitpunkt des Speichern in die Session nicht mehr wodurch die Daten nicht mehr bzw. überhaupt nicht in der Session stehen alternativ könntes du die Daten direkt in die Session speichern.
HStev ist offline   Mit Zitat antworten
Alt 29.06.2005, 11:28  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von HStev
Ich denke da der Destructor vom GarbageKollector
Erklären
imported_Ben ist offline   Mit Zitat antworten
Alt 29.06.2005, 12:09  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zitat:
Aufgrund des Reference-Counting Systems, das mit PHP 4's Zend Egine eingeführt wurde, wird automatisch entdeckt, wenn auf eine Ressource nicht mehr zugegriffen wird (wie in Java). Wenn dies der Fall ist werden alle Ressourcen, die für diese Ressource in Gebrauch waren, durch den "Müllsammler" (garbage collector) freigegeben. Aus diesem Grund ist es selten jemals notwendig, Speicher manuell durch Aufruf von free_result-Funktionen freizugeben.
http://www.php-homepage.de/manual/la...s.resource.php
http://www.dynamic-webpages.de/php/l...s.resource.php
http://manuals.phpforum.de/php/langu...s.resource.php


Hatte schon ein ähnliches Problem mit einer DB Klasse und wollte im Destructor auf die Resource zugreifen da aber der Müllsammler die SQL Klasse schon freigegeben hatte, hatte ich auch keine Resource mehr ... ch glaub das Thema hatte ich hier sogar schon im Forum besprochen

ps: ich hab ja auch beigeschrieben "ich denke" ich hab keine Behauptung aufgestellt
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline   Mit Zitat antworten
Alt 29.06.2005, 14:36  
Gast
 
Beiträge: n/a
Standard

danke für die schnelle hilfe, ich habe die klasse jetzt so umgeschrieben, dass ich über die store() operation direkt in $_SESSION['__objectStore'] speichere. wenn auch nicht sehr elegant
  Mit Zitat antworten
Alt 29.06.2005, 15:36  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Ja ich konnte dem Destructor in PHP bisher noch keinen Nutzen entziehen ... die einzigste die dabei kommt wäre halt nur wenn ich ein Objekt öfters überschreiben müsste wäre er sinnvoll aber ansonsten ....
HStev ist offline   Mit Zitat antworten
Alt 29.06.2005, 19:36  
Gast
 
Beiträge: n/a
Standard

wieso dann überhaupt denn destruktor, wo es doch __sleep() gibt und umgekehrt
  Mit Zitat antworten
Alt 30.06.2005, 08:50  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zitat:
Zitat von hautzi
wieso dann überhaupt denn destruktor, wo es doch __sleep() gibt und umgekehrt
__sleep ist für seralize und unseralize
HStev ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Session Problem karina_02 PHP Tipps 2008 6 18.05.2008 22:37
Session Variablen als Referenz!? O_o Sam781 PHP-Fortgeschrittene 4 01.10.2007 11:19
Problem bei session Lifetime Cyberbob_at_tot PHP Tipps 2007 5 05.06.2007 17:47
session nach seitenwechsel leer... GELight PHP Tipps 2006 8 17.09.2006 15:17
session array Timo Trallala PHP Tipps 2006 18 22.04.2006 13:45
[Erledigt] php session problem :( PHP Tipps 2005-2 5 21.10.2005 16:37
Session abschaltbar?? Probleme mit Objekten in Session! becks123 PHP-Fortgeschrittene 3 19.09.2005 15:47
Bei Session - verfall socke PHP Tipps 2005-2 12 01.09.2005 02:30
Klassenobjekt in ner Session speichern?! Finkman PHP Tipps 2005-2 5 09.08.2005 00:38
Session wird nicht angelegt PHP Tipps 2005-2 7 24.07.2005 13:35
Kreieren einer Session PHP Tipps 2005 11 28.05.2005 15:16
Session error nach Umstellung auf PHP 5 PHP Tipps 2005 15 13.05.2005 14:35
verliere Session Sonja PHP Tipps 2005 3 27.04.2005 09:32
[Erledigt] Formulardaten in einer Session speichern, per Link übergeben PHP Tipps 2004-2 2 29.12.2004 15:47
[Erledigt] Hilfe...PhpBB Session Problem!! PHP Tipps 2004-2 2 15.12.2004 18:28

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
wrapper klasse php, php session wrapper, session wrapper klasse

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:56 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.