Objekt neu initialisieren

Da_Chris

Erfahrenes Mitglied
Ich habe ein Objekt das ich beim aufruf einer Methode neu initialisieren möchte.
Sieht so aus:
PHP:
class myclass
{
  public $var = "xyz";

  function reinit()
  {
    ......
  }

}
$myclass = new myclass();
$myclass->var = "blub";
$myclass->reinit();
Mit reinit() soll das Objekt in den Start Zustand zurückgesetzt. Also alle Variablen wieder auf den Voreinstellungen.
In dem Fall sollte $var wieder "xyz" sein.
Gibt es dafür eine Funktion oder hat jemand eine Idee?
 
Mit reinit() soll das Objekt in den Start Zustand zurückgesetzt. Also alle Variablen wieder auf den Voreinstellungen.
In dem Fall sollte $var wieder "xyz" sein.
Gibt es dafür eine Funktion oder hat jemand eine Idee?

Dazu braucht du keine Methode

PHP:
$myclass = new myclass();
$myclass->var = "blub";
unset($myclass);
$myclass = new myclass(); // schon haste ein standard Objekt

Mfg Splasch
 
doch für mein script brauche ich die methode.
Meine Fragestellung war wohl zu ungenau.
Ich möchte dass sich das projekt selbst neu initialisiert beim Aufruf meiner Methode reinit().
 
PHP:
class myclass
{
  public $var = "xyz";
  
  function reinit()
  {
    unset($this);
    return new self;
  }

}
$myclass = new myclass();
$myclass->var = "blub";
echo $myclass->var;
$myclass = $myclass->reinit();  
echo $myclass->var;

Reicht dir das so?
 
mh leider nicht ganz.
Hintergrund ist ein Userobjekt mit dem ich login und logout steuern möchte.
beim logout sollen die standard vars wieder gesetzt werden (Gastuser).

PHP:
class user
{
	public 		$id 			= 0;
	public 		$name 		= "Guest";
	public 		$email 		= "";
	protected $rights 	= array();
	private 	$password = "";
	public 		$regtime 	= "";

  function reinit()
  {
		unset($this);
                return new self;
  }

  function logout()
  {
		$this->reinit();
  }
}
$user -> logout();
 
Und wie möchtest du das ganze realisieren?
PHP ist eine "per Request" Sprache, d. h. du müsstest das Objekt irgendwie mit dir rumschleppen, denn beim Wechsel der Seite ist das Objekt gestorben...
Deshalb sehe ich auch ehrlich gesagt innerhalb deines Skriptes keinen Grund für diese Methode.

Erläuter das doch bitte mal etwas näher?
 
Mh naja gut ich baue nur zuerst die klasse und binde sie dann in mein script ein die überlegung war nur die wenn ich nach dem logout in meinem script das objekt weiterbenutzen will müsste es auf gast zurück gesetzt werden aber da macht das ganze dann so keinen sinn.
Trotzdem danke.
 
Ich meine, es müsste vor erstellen des User Objektes schon geklärt sein, ob es ein Gast ist oder ein registrierter User. Bei einem Seitenaufruf prüfst du zum Beispiel durch eine Sessionvariable, ob ein eingeloggter Benutzer die Seite aufruft. Sollte das der Fall sein, dann erstellst du ein Objekt mit dem Parameter, das hier ein bekannter User erstellt werden soll. Wenn ein Gast die Seite aufruft, dann wird einfach kein Parameter übergeben.

Beispiel
PHP:
if($_SESSION['registered_user'] === TRUE) {
   $user = new user(array('id' => $_SESSION['id'], 'name' => $_SESSION['name']));
} ELSE {
   $user = new user();
}


// Die Klasse dann umschreiben

class user
{
    public $id = null
    public $name = null;
    protected $isRegisteredUser = FALSE;
  
    function __construct($aUserInfo)
    {
          if(is_array($aUserInfo)) {
                $this->id = $aUserInfo['id'];
                $this->name = $aUserInfo['name'];
                $this->isRegisteredUser = TRUE;
          } ELSE {
                $this->isRegisterUser = FALSE;
          }
    }

}
Sollte der User sich ausloggen (als ein Request auf z.b. logout.php) wird dann die Sessionvariable gelöscht und bei der initalisierung des User Objektes bei einem neuen Request (User drückt F5 im Browser) ist es wieder Gast.
Andersrum, logged sich der User ein (Request auf Login.php) dann wird die Sessionvariable mit den Userdaten gefüllt.

Wie Felix halt sagt, bei jedem Request wird der Status des Users bestimmt.
Ich würde sagen, das es kaum einen Fall gibt, wo sich der Status des Besuchers während der Ausführungszeit des Scriptes ändert. Solltest du durch dein Script durch Prüfungen erkennen, das der User eigentlich ausgelogged sein sollte, dann sollte der Benutzer erstmal darüber informiert werden, zum Beispiel durch eine Ausgabe (Sie wurden ausgelogged) und der User muss dann durch neuaufrufen der Seite einen neuen Request absenden. Da du beim Zwangslogout vorher die Session gekillt haben solltest, wird er aufomatisch wieder Gast sein.

Vielleicht planst du das ganze aber auch in einem anderen Kontext, den auch ich gerade übersehe.
Dann würde ich in der reInit() Methide einfach die Klassenvariablen zurücksetzen.

PHP:
class user
{
   const DEFAULT_USER_ID = 0;
   const DEFAULT_USER_NAME = 'Guest';
   public $id = null;
   public $name = null;
   //...weitere userbezogene Variablen
   function reInit()
   {
       $this->id = self::DEFAULT_USER_ID;
       $this->name = self::DEFAULT_USER_NAME;
       //...weitere userbezogene Variablen
   }
}

Gruss
 
hi ja das initialisieren als gast oder angemeldeter user funktioniert ich wollte wie gesagt nur die eventualität einschliessen nach dem logout den user wieder als gast zu behandeln.
wie gesagt ist erledigt.
 
Zurück