Gegenseitiges Einbinden

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ich würde euch gerne mehr Code zeigen, was aber nicht Möglich ist. Grund dafür ist, dass es hier um sensible Systeme geht, die nicht jeder Öffentlich zusehen bekommen soll ;)
    // Anmerkung: SingletonPattern hat nicht funktioniert.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von GneX ()

  • Hey,

    dann werde ich mir das Morgen doch mal anschauen. Kannst du mir bis dahin evtl. 2-3 ähnliche Klassen basteln? Die müssen nur das gleiche Problem darstellen und im Sinne des Fehlers funktionieren (der Fehler muss funktionieren <- lol?)...


    Edit:
    noah.org/wiki/Apache_Segmentation_fault

    Evtl. hilft das? Habe ich jetzt auf die Schnelle noch gefunden...
    My lovely mister singing club...
  • Leider hat dein LinkTipp auch nicht geholfen. Die Klassen nachzubauen ist nicht ganz einfach, da dir dazu eigentlich das WCF fehlt. Im Prinzip drei Klassen und

    - Klasse A include B und C
    - Klasse B include A
    - Klasse C include A

    Dann kannst Du beim Konstruktor eine neue Instanz der includeten Klassen aufrufen.
  • Die Lösung ist ganz einfach, du produzierst eine Endlosschleife.
    "Verein" hat im Konstruktor ein "new GxPersonalData". Und das "GxPersonalData" hat im construct wieder ein "new Kunde".

    Es gibt verschiedene Arten von Abhängigkeiten. Informiere dich mal zu UML und Komposition und Aggregation.
    Du bildest eine Aggregation ab - PersonalData kann nicht ohne Kunde existieren, es wäre aber sinnvoller eine Komposition abzubilden und den Kunden nur bei Bedarf zu laden.

    Dazu entfernst du den Kunden aus dem Konstruktor und greifst fortan nur noch mit "getKunde" auf das Attribut zu.
    getKunde lädt dann den Kunden bei Bedarf.

    Quellcode

    1. public function getKunde() {
    2. return $this->kunde = ($this->kunde !== null
    3. ? $this->kunde
    4. : new Kunde($this->kundeID)
    5. );
    6. }
    7. }


    Das solltest du bei allen Variablen machen, die du nur bei Bedarf brauchst.
  • ich greife (auch wenn erledigt) dieses thema nochmal auf ... weil :

    ich habe 3 klassen (constructor / file / config) habe die mal etwas verkürzt.

    PHP-Quellcode

    1. $constructor
    2. $constructor->file // abhängigkeit
    3. $constructor->config // abhängigkeit
    4. $file
    5. $file->construct // keine abhängigkeit wenn default werte gesetzt werden
    6. $file->config // abhängigkeit bei callmethods
    7. $config
    8. $config->construct // keine abhängigkeit wenn default werte gesetzt werden
    9. $config->file // abhängigkeit bei callmethods
    Alles anzeigen

    und leider produziere ich damit einen loop :(
    da file und config sich immer gegenseitig brauchen.

    wäre es eine sinnvolle alternative beide klassen (config und file) jeweils nur mit "defaultwerten" zu instanzieren und erst wenn beide klassen instanziert sind (von constructor aus) die defaultwerte um andere werte zu erweitern ?
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll
  • Auch wenn das vorige Thema etwas mit "einbinden" zu tun hatte, kannst du für dein Loop Problem ruhig ein eigenes Thema eröffnen ;)

    Aber zu deinem Problem:
    Was genau macht die Klasse File und was macht die Klasse Constructor??

    Allein von der Begrifflichkeit würde ich davon ausgehen dass zwar diese Constructor Klasse irgendwas mit File macht aber nicht umgekehrt.

    Wenn du die beiden Klassen etwas von einander abtrennen könntest, wäre das super ;)
  • die constructor klasse ist meine singleton factory, die (je nach configuration <- eigene klasse) andere klassen (template, router, session etc) automatisch oder nur bei bedarf läd.
    die file klasse stellt dabei einfacheren zugang zu den verzeichnissen her

    PHP-Quellcode

    1. $this->path->library // pfadangabe zum haupt libraries verzeichniss
    2. $this->path->list->libary // array mit pfadangaben für alle verfügbaren library verzeichnissen


    die constructor class benötigt daher die config um vorab alle 'autoload' files aus den entsprechenden verzeichnissen zu laden.
    die file klasse benötigt die config klasse um neben 2 default verzeichnissen (zum laden von constructor, file, und config) weitere verzeichnisse zu definieren
    die config klasse wiederum benötigt die file klasse um wiederum alle verfügbaren config verzeichnisse zur verfügung zu haben ($this->path->list->config)

    meine idee war nun die file klasse zunächst nur mit den 2 (mit config pfad 3) defaultwerten zu instanzieren und der constructor und config somit erstmal nur diesen pfad zur verfügung zu stellen.
    sobald die config klasse instanziert ist ruft diese dann die configuration für die file klasse und die constructorklasse auf.

    sollte doch dann keinen loop mehr erzeugen oder ?
    - ich weis, dass php 4 veraltet ist und ich lieber php 5 nutzen sollte
    - ich mache das ganze nicht nur um mein projekt zu erstellen, sondern um das ganze auch zu verstehen
    - wenn das ganze in php 4 funktioniert will ich es sauber nach php 5 migrieren
    - kurz gesagt ich WILL LERNEN VERSTEHEN und restlos BEGREIFEN wie das was ich möchte in php 4 / 5 / 6 umgesetzt werden soll