Ankündigung

Einklappen
Keine Ankündigung bisher.

Klasse2 innerhalb Klasse1, die auf Klasse1 zugreift

Einklappen

Neue Werbung 2019

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

  • Klasse2 innerhalb Klasse1, die auf Klasse1 zugreift

    Hallo PHP.DE Forum,

    ich bin gerade dabei 4 Klassen miteinander zu verbinden. Ich erzähle erstmal worum es geht. Es gibt eine Klasse1, die eine Instanz vom Objekt1 ist, innerhalb derer eine Klasse2 erstellt wird, die vollen Zugriff auf die Attribute, Funktionen etc der Klasse1 haben soll. Klasse2 ist dabei eine Instanz von Objekt2. Innerhalb von Klasse2, soll auch die Klassen Klasse3 und Klasse4 geben, die ebenfalls Instanzen von Objekt2 sind. Klasse2, Klasse3 und Klasse4 sollen aber vollständig unabhängig voneinander sein und vollen Zugriff auf Methoden und Eigenschaften von Klasse1 haben?

    Wie kann man das am Elegantesten lösen?

    Mit freundlichen Grüßen METJO.


  • #2
    Es gibt eine Klasse1, die eine Instanz vom Objekt1 ist, innerhalb derer eine Klasse2 erstellt wird
    Klasse2 ist dabei eine Instanz von Objekt2
    Kann es sein, das du die Begriffe Klasse und Objekt verwechselst? Hast du ein reduziertes Beispiel?

    EDIT: suchst du sowas in der Art bzw. hättest du sonst das Stichwort für weitere Recherche.

    http://www.php.de/software-design/99...-objekten.html

    LG
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Ähm...Wie wärs wenn du Klasse1 public Methoden spendierst? Bzw. falls du mit "innerhalb" Vererbung anstatt Komposition meinst, dann protected.

      Kommentar


      • #4
        Zitat von hausl Beitrag anzeigen
        Hast du ein reduziertes Beispiel?
        Es ist so etwas in der Art hier:
        PHP-Code:

        class newtonIterator {
            public 
        $var1 0;
            public 
        $var2 0;

            function 
        __construct $equation ) {
                
        $this->equation $equation;
            }

            function 
        getValue $x ) {
                eval( 
        $equation );
            }

            function 
        getCurve ( ) {
                return 
        $y;
            }

            function 
        tester2 ( ) {
                
        $this->var 2;
                ...
            }

            function 
        tester3 ( ) {
                
        $this->var2 4;
                ...
            }
        }

        class 
        kappa {
            function 
        tester ( ) {
                
        newtonIterator::__construct '$v1 = kappa::tester2 ( );' );
            }

            function 
        tester2 ( ) {
                
        newtonIterator2::__construct '$v2 = kappa::tester3 ( );' );
            }
        }

        $kappa = new kappa
        In den newtonIteratoren können Funktionen des Objektes kappa ausgeführt und Werte des Objektes kappa geändert werden.

        Kommentar


        • #5
          Beschreibt n icht das Problem.
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Und ist vor allem unvollständig und voller Fehler. Da gibt's evals ohne Rückgaben, Funktionen die unsichtbare Variablen zurückgeben und Konstrukturen werden aufgerufen die es gar nicht gibt. Wie soll man daraus erkennen was du überhaupt haben willst?

            Kommentar


            • #7
              Ja bitte versuche das Problem (für uns) so weit wie einfach zu vereinfachen und auf absolut wesentliche Merkmale zu reduzieren, das macht es leichter (oder überhaupt erst möglich) dir zu helfen. Ich blicke auf Anhieb nämlich auch nicht durch :P

              Kommentar


              • #8
                @TE

                Ich verstehe dein Problem leider auch nicht ganz. Zumal ich auch Schwierigkeiten habe mit diesen Namen wie Klasse 1 und Klasse 2 etc.

                Versuche bitte mal ein verständliches, eventuell Praxisnahes Beispiel für dein Problem zu definieren, dann lässt es sich sicher auch besser helfen.

                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


                • #9
                  So sieht mein Rezept aus: Instanzvariablen sollten nach Möglichkeit immer "private" gehalten werden und nur durch Methoden veränderbar sein. Methoden können hingegen alle Sichtbarkeitsmodifizierer nutzen. Abhängigkeiten zwischen Klassen am besten durch DependencyInjection via ConstructorInjection, wobei es die Objektinstanziierung innerhalb einer Klasse grundsätzlich zu vermeiden gilt. Bei laufzeitdynamischen Abhängigkeiten (Bäume, Listen, andere) kann auch auf MethodInjection zurückgegriffen werden.

                  Erklärung: Der "protected"-Modifizierer (ebenso wie -public) erlaubt den Zugriff von einer ableitenden Klasse, bzw. von überall. Die Zugriffsbeschränkung über Methoden vereinfacht den Zugriffsweg (es gibt nur noch einen Kommunikationsweg) und macht ihn kontrollierbar bei gleichzeitiger Erhaltung der Änderbarkeit der Datenverwaltung einer Klasse ohne Auswirkungen auf dessen Interface. DependencyInjection sorgt für eine lose Bindung zwischen Klassen. Das führt dazu, dass du die Abhängigkeiten nur noch über ein Interface beschreibst und die eigentliche Implementierung der konkreten zu injizierenden Instanz kontextspezifisch ersetzen kannst (beispielsweise mit einer Testklasse).

                  Btw: Such mal nach PHP PSR-2
                  Standards - Best Practices - AwesomePHP - Guideline für WebApps

                  Kommentar

                  Lädt...
                  X