2 Klassen initialiseren sich gegenseitig

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 2 Klassen initialiseren sich gegenseitig

    Hallo,

    ich habe in meinem Projekt logischerweise mehrere Klassen.
    Einige davon benötigen sich jedoch immer gegenseitig.
    Ich habe zum Beipsiel eien Klasse Shop.class.php und eine Klasse Angebot.class.php

    Beide implementieren das Singleton interface.
    Jeweils im Konstruktor initialisiere ich eine Klassenvariable mit der Instanz der entsprechenden Klasse.
    Was passiert, könnt ihr euch ja vielleicht denken.
    Das Projekt geht in eine Endlosschleife mit der folgenden Fehlermeldung:

    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 52 bytes) in...

    Wie kann man das Problem umgehen?
    Bisher ist bei mir noch nie so ein Problem aufgetreten.

    Vielen Dank im voraus.

  • #2
    Initialisiere das Gegenstück erst, wenn du die aufrufende Klasse bereits vollständig initialisiert hast …*bzw. zumindest bis zu dem Punkt, wo die Singleton-Methode auch eine Instanz zurückliefern kann!
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      ja, daran habe ich auch schon gedacht, aber dann mussi ch immer sicherstellen dass die initialisierung in der Funktion aufgerufen wird die imemr als erstes benötigt wird, damit in den nächsten Funktionen die Instanz auch vorhanden ist.
      Klingt auchn icht wirklich sauber.

      Kommentar


      • #4
        Dass ein Angebot nur in einem Shop existieren kann, sehe ich ein. Aber wieso kann ein Shop nur existieren, wenn es ein Angebot gibt?

        Kommentar


        • #5
          Zitat von onemorenerd Beitrag anzeigen
          Dass ein Angebot nur in einem Shop existieren kann, sehe ich ein. Aber wieso kann ein Shop nur existieren, wenn es ein Angebot gibt?
          Hallo, ja du hast recht, aber die Klasse Shop benötigt einige Informationen zu einem Angebot und daher die initialisierung im Konstruktor.

          Kommentar


          • #6
            Warum Angebot ein Singleton ist, verstehe ich am wenigsten … selbst wenn das bei dir so ist: Woanders ist es nicht so. Grund genug, Angebot nicht als Singleton zu implementieren.
            [FONT="Helvetica"]twitter.com/unset[/FONT]

            Shitstorm Podcast – Wöchentliches Auskotzen

            Kommentar


            • #7
              Zitat von dakingno1 Beitrag anzeigen
              … die Klasse Shop benötigt einige Informationen zu einem Angebot und daher die initialisierung im Konstruktor.
              Welche Informationen sollen das sein und müssen die wirklich schon im Konstruktor bekannt sein? Vermutlich fackelst du viel zu viel im Ctor ab.

              Kommentar


              • #8
                Eigentlich werden dort nur einige Klassenvariablen mit den entsprechenden Instanzen der benötigten Klassen initialisiert...

                Kommentar


                • #9
                  Wofür wird denn die Angebots-Instanz im Konstruktor benötigt? Sie sollte an dieser Stelle überhaupt nicht benutzt werden, denn wie bereits erwähnt, muss ein Shop auch ohne Angebote funktionieren. Wenn sie nicht benutzt wird, sollte sie da allenfalls optional hineingereicht werden, aber keinesfalls zwangsweise vorhanden sein müssen.

                  Wenn sich der Abhängigkeitsknoten in deinem Kopf nicht langsam löst, zeig mal etwas Code her.

                  Kommentar


                  • #10
                    Zitat von dakingno1 Beitrag anzeigen
                    Hallo, ja du hast recht, aber die Klasse Shop benötigt einige Informationen zu einem Angebot und daher die initialisierung im Konstruktor.
                    Ich denke du hast da ein riesiges Design Problem im allgemeinen. Die Klasse Shop darf doch niemals nicht von der Klasse Angebot in Abhängigkeit stehen. Schon der logische Umkehrsinn muss dir klar sein. Die Klasse Shop muss, wenn man einen Shop betreiben will, immer existieren. Aber man braucht ja nun nicht immer Angebote in seinem Shop wenn man keine Angebote anbieten will. Also wenn überhaupt dann hängt die Klasse Angebot von der Klasse Shop ab, aber selbst das würde ich nicht in Abhängigkeit setzen, da hast du genügend Möglichkeiten die Klassen als vollkommen eigenständige Klassen zu nutzen ohne diese in irgendeine Abhängigkeit zu setzen.

                    Gruß litter
                    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                    http://www.lit-web.de

                    Kommentar


                    • #11
                      Und warum ist der Shop Singleton?
                      Singletons sind böse !

                      Und mal wieder:
                      Mache dich über "Dependency Injection" kundig.
                      (für alle, welche schon wieder darauf gewartet haben)
                      Wir werden alle sterben

                      Kommentar


                      • #12
                        Zitat von combie Beitrag anzeigen
                        Singletons sind böse !
                        Plenken übrigens auch …
                        [FONT="Helvetica"]twitter.com/unset[/FONT]

                        Shitstorm Podcast – Wöchentliches Auskotzen

                        Kommentar


                        • #13
                          Singletons sind böse!

                          Besser?
                          Wir werden alle sterben

                          Kommentar


                          • #14
                            Wieso sind Singletons böse?
                            Nur so kann man sicherstellen nur ein einziges Objekt einer Klasse zu besitzen.
                            Wenn ich eine Seite in meinem Projekt aufrufe, dann ist es ein bestimmter Shop, also benötige ich überall nur ein uns dasselbe Objekt mit entsprechenden Inforamtionen zu diesem Shop.
                            Dasselbe gilt dann für die Angebote zum Shop.
                            An mehreren Stellen benötige ich also dieselben Informationen des Angebote.
                            Ihr habt schon recht dass das im moment nicht ganz sauber ist.
                            Das liegt aber daran weil das Projekt refaktorisiert wird. Vorher war alles strukturiert Programmiert und die Informationen wurden über Konstanten ausgetauscht.
                            Daher ist es alles noch so unsauber.
                            Aber ich merke schon, ich muss bei der Refaktorisierung noch weiter unten anfangen.

                            Vielen Dank für die Diskussion und Hilfestellung.

                            Aber eins würde mich noch interessieren.
                            Wieso sind Singletons nun böse?^^

                            Kommentar


                            • #15
                              Zitat von dakingno1 Beitrag anzeigen
                              Wieso sind Singletons böse?
                              Nur so kann man sicherstellen nur ein einziges Objekt einer Klasse zu besitzen.
                              Wenn ich eine Seite in meinem Projekt aufrufe, dann ist es ein bestimmter Shop, also benötige ich überall nur ein uns dasselbe Objekt mit entsprechenden Inforamtionen zu diesem Shop.
                              Dasselbe gilt dann für die Angebote zum Shop.
                              An mehreren Stellen benötige ich also dieselben Informationen des Angebote.
                              Ihr habt schon recht dass das im moment nicht ganz sauber ist.
                              Das liegt aber daran weil das Projekt refaktorisiert wird. Vorher war alles strukturiert Programmiert und die Informationen wurden über Konstanten ausgetauscht.
                              Daher ist es alles noch so unsauber.
                              Aber ich merke schon, ich muss bei der Refaktorisierung noch weiter unten anfangen.

                              Vielen Dank für die Diskussion und Hilfestellung.

                              Aber eins würde mich noch interessieren.
                              Wieso sind Singletons nun böse?^^

                              Ich denke du solltest von ganz vorn beginnen das System neu aufzuziehen, denn eine bestehende Anwendung die prozedural geschrieben ist in OOP umzuändern ist denke ich nicht das gelbe om EI. Du kennst die Funktionalität des Shop, also beginne von vorn, ertelle dir Diagramme, Use Case, Klassendiagramme. Durchdenke dir deine Anwendung vorher recht gut, versuche weit voraus zu schauen, vor allem auch wo eventuelle Erweiterungen folgen können.

                              Sigletons sind nicht böse, aber es gibt meiner Meinung nach nur sehr wenige Fälle wo es Sinn macht die einzusetzen, dass heist in den wenigsten Fällen wird es passieren das ein Objekt nur ein einziges mal existieren sollte. Von daher richte auch mal ein Blick auf registry Pattern.

                              Gruß litter
                              Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                              http://www.lit-web.de

                              Kommentar

                              Lädt...
                              X