Webstatt.org - Community seit 2006 - 2012 (2024?)

Verknüpfung zwischen Objekten

Avatar user-168
03.12.2006 21:23

Moin.

Also ich mache mir gerade Gedanken zu einer etwas komplexeren Objektstruktur.

Wenn ich es mal ganz einfach zusammenfasse, dann habe ich eine Class, in der ich die Variablen
private $fehler;
private $template;
benutze, um darin mit $this->fehler = new fehler; und $this->template = new templates; die Objekte des Fehlersystems und des Templateobjekts anzulegen.

Früher machte man das ja scheinbar mit &new und nun nur noch mit new. Habe ich zwar nicht ganz verstanden, aber es funktioniert so auf jeden Fall. Das hatte ja was mit Referenz und Anlegen zu tun.

Wenn ich nun davon ausgehe, dass meine Templateclass auch auf die Fehlerclass zugreifen können soll, dann muss ich das ja mit ner Referenz machen. Ich will die Class ja nicht nochmal anlegen, wenn einmal genügt.
Ich dachte, dass ich dazu einfach in templates einen Konstruktor anlege, dem ich dann die Variable $fehler übergebe und diese die Referenz auf die Fehler-Class enthält. Diese Referenz muss ich ja nur in der fehler-Class als Variable ablegen, um darauf zugreifen zu können.

Daher:
Hauptobjekt:

<?php

class system {

private $template;
private $fehler;

$this->fehler = new fehler;
$this->template = new templates($this->fehler);

}

?>

Templates-Objekt:

<?php

class templates {

private $fehler;

function construct ($fehler){
$this->fehler = $fehler;
}

public function test ($test){
if (!$test)
$this->fehler('Fehlertext'zwinkern;
# Hier kommt ein Fehler: "Fatal error: Call to undefined method templates::fehler() in [...]"
}

}

?>



Wie schaffe ich es also von einem Objekt auf ein anderes Objekt zu verweisen, wenn beide Objekte in einem übergeordneten Objekt angelegt wurden?

Danke schonmal für alle Antworten!

Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
user-343
04.12.2006 06:59

Ich mache es bei mir so: Ich übergebe den Kindelementen jeweils eine Referenz auf die Eltern. Funktioniert ganz gut:

 class System {
public $fehler;
public $template;

public function __construct() {
$this->fehler = new Fehler(&$this);
$this->template = new Template(&$this);
}
}

class Fehler {
public $parent;

public function __construct($parent) {
$this->parent = &$parent;
}
}

class Template {
public $parent;
const TEMPLATE_NOT_EXISTS = 64; // pow(2, 6);

public function __construct($parent) {
$this->parent = &$parent;
$this->parent->fehler->throw(self::TEMPLATE_NOT_EXISTS, 'Fataler Fehler: Das angegebene Template existiert nicht!'zwinkern;
}
}

Avatar user-168
04.12.2006 12:28

Also sehe ich das richtig, dass man so verknüpft und ich quasi das Objekt jedesmal beim Übergeben neu angelegt habe?

Aber auf jeden Fall danke ich. Es lag aber an was anderem... Vor lauter gleichen Bezeichnern hab ich aus:

$this->fehler->fehler();

$this->fehler();

gemacht. Fettes Grinsen

Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
user-343
04.12.2006 16:34

Wenn ich nun richtig verstehe, was du meinst, dann: Jein.
In PHP 4 hättest du jedes mal das Objekt "geklont". PHP 5 legt immer eine Referenz an - Naja, ich finde es einfach klarer, was gemeint ist, wenn ich das & da hin schreibe, anstatt es wegzulassen... zwinkern

Avatar user-287
06.12.2006 19:05

was bedeutet das & vor einer Variable oder ein _? Kenn mich mit PHP5 noch nicht so aus.

user-303
06.12.2006 19:27

_ ist reine formatierung(abgesehen von ein paar definierten sonderfunktionen, die aber einfach so definiert wurden und nicht direkt was mit dem _ zu tun haben), das & macht eine referenz (in anderen sprachen auch pointer bzw. zeiger genannt) auf die var.

bsp:
<?php
$a = 1;
$b = &a;
$a = 2;
echo $b; // 2

Avatar user-287
07.12.2006 14:14

Original von user-303
_ ist reine formatierung(abgesehen von ein paar definierten sonderfunktionen, die aber einfach so definiert wurden und nicht direkt was mit dem _ zu tun haben), das & macht eine referenz (in anderen sprachen auch pointer bzw. zeiger genannt) auf die var.

bsp:
<?php
$a = 1;
$b = &a;
$a = 2;
echo $b; // 2


also wird durch das & die Variable immer aktuell gehalten.