OOP: clone
Günther S
- php
0 dedlfix
Hallo,
ich seh gerade anscheinend den Wald vor lauter Bäumen nicht und hänge bei folgendem Problem fest:
// Variante 1
$login = clone($_SESSION['login_object']); // klappt hervorragend und hat die erwünschte wirkung (alle attribute von $_SESSION['login_object'] werden in $login kopiert.
// Variante 2
class Login()
{
public function __construct()
{
// dank einiger Debug-Ausgaben weiß ich, dass die if-Bedingung betreten wird und trotzdem nicht das gewünschte Ergebnis erzielt wird.
if(is_object($_SESSION['login_object']))
{
return clone($_SESSION['login_object']);
}
}
}
$login = new Login();
// in diesem Fall ist $login zwar eine ganz normale Instanz der Klasse Login, aber die Attribute von $_SESSION['login_object'] wurden nicht übernommen. Wie bekomme ich das hin?
Gruß,
Günther
echo $begrüßung;
Ich nehme an, es handelt sich um PHP 5. Welche Version ist es genau? (Diese Information wäre nur zum Nachvollziehen von Problem hilfreich, wenn meine nachfolgende Erklärung noch nicht reicht.)
$login = clone($_SESSION['login_object']); // klappt hervorragend und hat die erwünschte wirkung (alle attribute von $_SESSION['login_object'] werden in $login kopiert.
clone ist keine Funktion sondern ein Schlüsselwort, das allein steht. Die Klammern bewirken bei dir nur, dass die Variable $_SESSION['login_object'] zu einem Ausdruck wird.
class Login()
public function __construct()
return clone($_SESSION['login_object']);
Konstruktoren geben unter PHP 5 nur Objekte der jeweiligen Klasse zurück. Unter PHP 4 war es noch möglich etwas ganz anderes zurückzugeben.
$login = new Login();
// in diesem Fall ist $login zwar eine ganz normale Instanz der Klasse Login, aber die Attribute von $_SESSION['login_object'] wurden nicht übernommen. Wie bekomme ich das hin?
Verwende entweder das Factory- oder das Singleton-Pattern.
echo "$verabschiedung $name";