Klasse aus Klasse aufrufen

Hi,

ich arbeite zur zeit an der umstellung auf klassen.
garnich so einfach da den überblick zu behalten XD

Zum stand der Dinge:
Ich erzeuge von jeder Klasse Singeltons, sobald der erste aufruf erfolgt.
Diese werden dann über die Laufzeit hin immer wieder verwendet.
z.B.
[PHP]$tmpDaten = daten::init($ID);[/PHP]
Dies erzeugt (falls noch nicht vorhanden) eine Instanz der Klasse Daten und liefert diese zurück. Dann kann ich einfach über:
[PHP]$tmpDaten->set($Array);[/PHP]
die neuen Daten setzten.

Jetzt wollte ich aber beim erzeugen dieses Signeltons noch eine weitere Klasse mit benutzen:
(in der Class daten)
[PHP]$this->Eigenschaften = eigenschaften::init();[/PHP]
Dabei liefert mir aber PHP den Fehler, das er die Klasse nicht finden kann -.-

Was ist also falsch?
Wenn der Ansatz schon falsch ist, bitte berichtigt mich :smiley:

Hallo,

ist die zweite Klasse denn auch eingebunden?

Grundsätzlich ist der Ansatz nicht falsch, jedoch von dir ungenau formuliert:

Ich erzeuge von jeder Klasse Singeltons, sobald der erste aufruf erfolgt.

Damit implizierst du, dass du Klassen zur Laufzeit nach dem Singleton - Pattern erzeugst.
Ich gehe aber mal davon aus, dass diese Klassen bereits bestehen und du diese nach dem Muster entworfen hast.

Das was du erzeugst, nennt sich immer noch Instanz oder Objekt der Klasse. Es kann aber von dieser Klasse zur Laufzeit nur eines existieren.

„Jede Klasse“ nach dem Singleton-Muster zu entwerfen, lässt auf einen Designfehler schließen. Ich hoffe du bist dir über den Einsatz dieses Musters im Klaren.

Noch ein paar Tipps zu Programmierrichtlinien:

Klassennamen solltest du mit einem Großbuchstaben beginnen lassen. Variablen- und Methodennamen dagegen mit einem kleinen Buchstaben!

So sieht die Funktion auf, welche beim benutzen einer Klasse aufgerufen wird, um die Instanz zu erzeugen:

[PHP] public static function init($ID = 0)
{
//eine neue Ressource erzeugen
if($ID == 0)
$ID = self::create();
//Es konnte keine neue ID erzeugt werden, oder es wurde keine Übergeben
if($ID <= 0 || !is_numeric($ID))
return false;

    //Signelton erzeugen
    if (!isset(self::$instance[$ID])) 
    {
        $c = __CLASS__;
        self::$instance[$ID] = new $c($ID);
    }
    return self::$instance[$ID]; 
}[/PHP]

Im code rufe ich das wie oben beschrieben immer auf:
[PHP]$tmpObjekt = Daten::init(15);[/PHP]
Das würde mir zB die Instanz für ein Objekt mit den Daten des Elements mit der ID 15 in der DB erzeugen.

Beide Klassen sind eingebunden.
Ich kann mir also nicht erklären woran es liegen soll -.-

mit extend will ichnicht arbeiten, da es hier nicht den sinn erfüllt den ich will.

Moin,
Teste mal in der Datei, in der du das Daten-Objekt erzeugst, ob die Klasse eigenschaft überhaupt existiert [php]class_exists(„eigenschaften“)[/php].

man man man -.-

ich hasse tippfehler :smiley:

ich hab echt 100 mal drüber geschaut, hab den Anfangsbuchstaben auch überall extra nochmal gross geschrieben, nix…

dann hab ich einfach mal den Klassennamen kopiert und eingefügt und da gings :smiley:

Es wäre echt ein wunder gewesen, wenn ich der einzige mit diesem problem gewesen wäre :oops:

sry nochmal