echo $begrüßung;
// in der Klasse vor allen Methoden:
public $forum = "";
public $user = "";
// weiter unten eine neue Methode:
function setvars() {
$this->forum = '';
$this->user = '';
return true;
}
Die Methode setvars() sieht mir in der Form recht überflüssig aus. Die beiden Eigenschaften hast du ja schon mit einem Leerstring Default-Wert versehen. Müssten sie mit einem komplexeren Mechanismus initialisiert werden, bietet sich dafür der Konstruktor an. Nur wenn sie zwischendurch immer mal wieder geleert werden müssen, bietet sich dafür diese Methode an. Im return true sehe ich auch keinen gesteigerten Nutzen.
$db = new db('', 'noquery'); // damit keine Automatische Datenbank Abfrage gesendet wird (Methode db erweitert)
Hiermit erzeugst du ein Objekt, das in der Variable $db abgelegt ist. Für Objekte gelten die gleichen Zugriffbeschränkungen wie für alle anderen Variablentypen auch.
$db->setvars(); // Die Variablen forum und user für $db Als leere Menge definieren.
$db->forum = $table_prefix . 'forum';
$db->user = $table_prefix . 'users';
// Die Variablen überschreiben,... auch wenn das kein schöner Stil ist.
// Aber wenn ich direkt in setvars() $this->user = $table_prefix . 'users';
// angebe, kann $table_prefix nicht gefunden werden.
Ah, das ist der Sinn. Natürlich wird $table_prefix in der Methode nicht gefunden, weil Methoden/Funktionen ja ihren eigenen Gültigkeitsbereich haben. Definiere table_prefix als Konstante, wenn darin ein konstanter Wert abgelegt werden soll. Konstanten sind superglobal und überall erreichbar. Es ist jedoch für diesen Anwendungsfall wohl besser, wenn du der Methode setvars() die beiden Werte als Parameter mitgibst. Dann hat sie wenigstens wieder einen Sinn.
Aber in der Funktion login_right() wird $db->user trotzdem nicht erkannt und mit den beiden Fehlermeldungen vom ersten Post ausgegeben.
Ich bin Ratlos. Was übersehe ich?
Immer noch den Geltungsbereich von Variablen. Mit der gängigen Implementierung des Singleton-Musters bekommst du auch das in den Griff.
$db = db::getdb(); // das ist die Singleton-Methode
$db->... // Zugriff auf Eigenschaften und Methoden
Da PHP bei Objekten immer Referenzen übergibt, erhältst du (bei richtiger Implementation) mit dem Aufruf dieser Klassenmethode immer die Referenz auf die einzig existierende Instanz der Klasse. wann immer du in einem neuen Geltungsbereich diese Instanz benötigst, holst du dir ihre Referenz mit dem Aufruf der Singleton-Methode und legst sie in einer lokalen Variable ab.
Oder brauchst du mehrere dieser db-Objekte? Dann gibt es dafür das Factory-Pattern. Eine "Fabrik" ist für die Instantiierung von Objekten zuständig. Man übergibt ihr beim Auftrag, ein Objekt zu erstellen, die für die Erstellung nötigen Parameter und erhält ein passendes Objekt zurück. Die Bestellannahme und Auslieferung übernimmt wie beim Singleton-Pattern eine statische Klassenmethode. Die ist in jedem Geltungsbereich aufrufbar.
echo "$verabschiedung $name";