Zusammenarbeit von klassen?

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

  • #31
    Original geschrieben von deklarmart
    Leider nicht, denn dann kann ich mit der Instanz-Funktion nur Instanzen einer einzigen Klasse erstellen. Sprich: die Funktion getInstanz müsste ich in jeder Klasse schreiben.
    Das möchte ich nicht, denn anscheinend geht es auch irgendwie, eine allgemeine getInstanz Funktion zu schreiben, der ich den zu erstellenden Klassennamen übergebe function &makeInstance($className) (siehe Typo3 Funtkion in meinem Beitrag hier

    Dann sollte die Instanz (wenn ich das richtig verstehe) nicht in einer statischen Variable gespeichert sein, sondern jeweils als Referenz zurückgegeben werden (was ja auf das gleiche rauskommt).
    Entweder du speicherst deine Instanz irgendwo statisch und gibst lediglich eine Referenz auf diese zurück, oder du machst deine Zähler statisch, so dass sie an die Klasse und nicht an das Objekt gebunden sind!

    Kommentar


    • #32
      Original geschrieben von ministry
      Dann kannst du die Instanzen in jeweils einer statischen Variablen der t3lib_div-Klasse speichern. Irgendwo müssen sie gespeichert werden, sonst wird immer wieder eine neue Instanz erzeugt.
      Das mag sein, aber ich hab die t3lib_div-Klasse mehrmals durchgeschaut: dort gibt es keine statischen Variablen. Und wie sollte das bitte funktionieren, das ich statische Variablen dynamisch erzeuge, falls sie noch nicht vorhanden sind? Höchstens vielleicht über ein statisches Array, bei welchem der Key der Klassenname ist...

      Abgesehen davon: warumzum Teufel funktioniert das mit der Referenz nicht, gibts da keine Antowort drauf? Wozu gibt es dann Referenzen in PHP?

      PHP-Code:
      /*
      Klasse: Template
      Angenommen dies ist der erste Aufruf von makeInstanz() mit der
      Aufforderung, mir ein Objekt von MySQL zurück zu geben. Weil es
      dieses noch nicht gibt, wird es erzeugt und $test1 zugewiesen.
      */
      $test1 t3lib_div::makeInstanz('MySQL');

      [...
      Code...]

      /*
      Klasse: Counter
      Auch hier brauchen wir wieder eine DB-Verknüfung, also rufe ich
      wieder makeInstanz('MySQL') auf. Weil es nun schon ein Objekt
      von MySQL gibt (wurde ja in der Template-Klasse angelegt), wird
      in $test2 die Referenz zu $test1 zurückgegeben (kann man sich ja
      vorstellen wie einen Zeiger, oder?)
      */ 
      $test2 t3lib_div::makeInstanz('MySQL');
      $test2->query('blabla');

      //$test2 arbeitet jetzt also im gleichen Obejkt wie vorhin $test1, richtig? 
      Diese Funktion gibt mir also jeweils DAS Objekt zurück, was ich eben brauche (wenn es noch nicht vorhanden ist, wird es erstellt), zB. noch t3lib_div::makeInstanz('Logger');... und dafür sorgt doch eigentlich das "&"-Zeichen vor dem Funktionsnamen (dachte ich).
      Vielleicht hab ich in den vorherigen Beiträgen das Problem nicht so gut beschrieben, hoffe das es nun deutlicher ist.

      Original geschrieben von PHP-Desaster
      oder du machst deine Zähler statisch, so dass sie an die Klasse und nicht an das Objekt gebunden sind!
      Das mit dem Zähler war nur ein Beispiel. Ich kann ja nicht alle Klassen-Variablen die ich nochmal global für das ganze Projekt brauche statisch deklarieren... das kann nicht des Rätsels Lösung sein.
      Zuletzt geändert von deklarmart; 11.10.2007, 10:26.
      GLORIA PERPETUA

      Kommentar


      • #33
        Abgesehen davon: warumzum Teufel funktioniert das mit der Referenz nicht, gibts da keine Antowort drauf? Wozu gibt es dann Referenzen in PHP?
        Das & bedeutet, dass du eine Referenz auf den Rückgabewert bekommst. Dein Rückgabewert von der makeInstance()-Funktion ist aber immer eine mit new $className erstellte Instanz.

        Wenn du die Instanz in einer statischen Variable (static $instance) ablegst, prüfst, ob diese schon eine Instanz ist (if (is_object($instance))) und dann entsprechend diese (mit &) zurückgibst, erhältst du eine Referenz auf die schon bestehende Instanz (und das ist, was du haben möchtest).

        Wenn du andersrum die Instanz statisch abspeicherst, aber das & weglässt, bekommst du jedesmal eine neue Kopie der schon vorhandenen Instanz.

        Bitte korrigiert mich, wenn das nicht richtig ist.
        ich glaube

        Kommentar


        • #34
          Original geschrieben von combie
          http://framework.zend.com/manual/de/
          Nochmal kurz zum Thema Framework:

          CakePhp und Symfony habe ich aussortiert, die Entscheidung steht jetzt zwischen Zend und eZ Components. Die können ja in den aktuellen Versionen ca. das gleiche, haben gleich gute Dokumentationen und große Communitys.

          Das einzige was ich noch nicht 100% rausgefunden habe, ist, ob eZ Components auch komplett auf die MVC Architektur setzt (wie Zend). In einem alten Artikel zu eZ habe ich gelesen, das MVC funktionalität langsam eingebaut werden soll...

          Weiß einer von euch in wie weit das in der aktuellen Version 2007.1.1 Umgesetzt ist? Und was würdet ihr von den beiden empfehlen (vor allem warum)?
          GLORIA PERPETUA

          Kommentar

          Lädt...
          X