Zusammenarbeit von klassen?

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

  • Zusammenarbeit von klassen?

    Hallo ich habe 4 Klassen, klasse1, klasse2, klasse3 und klasse4.
    So ist es nun möglich das z.b. klasse2 auf Funktionen von klasse4, klasse4 auf Funktionen von klasse1, klasse3 auf Funktionen von klasse 2, usw. zugreifen kann?

    Funktioniert die Zusammenarbeit auch, wenn man die Funktionen außerhalb der klassen benutzt z.b.: $class1->funktion2(), $class3->funktion5(); usw.?

  • #2
    Erklär mal genauer, wozu das gut sein soll. Unter Umständen könnte Klassenabstraktion ein gutes Stichwort sein. Ansonsten können Klassen auf "fremde" Methoden nur nach Instanziierung der Klasse, die diese Methoden beherbergt, zugreifen - außer es handelt sich um statische Methoden.
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      Ich möchte mir eine kleine Klassenbibliothek mit Debug-Klasse, Datenbank-Klasse, Template-Klasse und eine Klasse für sonstige nützliche Funktionen schreiben.

      Die Debug-Klasse ist zum festhalten wichtiger Ereignisse und Auswertung von Fehlern zuständig.
      Jetzt braucht die Template-Klasse Zugriff auf die Debug-Klasse und Zugriff auf die Datenbank-Klasse.
      Und die Sonstige-Klasse(für die ich mir noch einen namen ausdenken muss ) braucht Zugriff auf alle anderen 3 Klassen.
      Es kann jetzt aber auch vorkommen, das ich zwischen 2 Klassen so eine Art Symbiose gibt.
      Damit meine ich: class1->funktion1() braucht class2-funktion1() gleichzeitig braucht aber class2->funktion1() wiederum class1->funktion2()

      So nun möchte ich aber das die Zusammenarbeit auch Funktion wenn ich eine Funktion von außen aufrufe($template->LoadTemplate(), jetzt soll die Template-Klasse an die Debug-Klasse einen Eintrag übergeben, den ich wiederum von außen($debug->OutputDebug()) ausgeben kann.
      Zuletzt geändert von lord_fritte; 30.09.2007, 21:25.

      Kommentar


      • #4
        Du bist nicht der erste mit diesen Problemen!
        Mache dich über "Design Pattern" kundig.
        zb. singleton, factory, registry, mvc, usw...
        Wir werden alle sterben

        Kommentar


        • #5
          Naja mal gucken, sonst muss ich eben alles in eine Klasse packen.

          Bei dem "Registry", darf man Klassen auch so benutzen: "Klasse::Funktion()" ?
          Ich dachte man dürfte das nur innerhalb von Klassen?
          Zuletzt geändert von lord_fritte; 30.09.2007, 21:34.

          Kommentar


          • #6
            Das darf man überall!
            Aber ob das immer so gut ist, ist eine ganz andere Frage...
            Wir werden alle sterben

            Kommentar


            • #7
              Was kann den da Negatives passieren?
              Aber geht das nicht auch mit dem extends Befehl?

              Kommentar


              • #8
                Mit extends sind wir dann wieder beim Stichwort Klassenabstraktion. Und diese stellt Ist-Ein Beziehungen zwischen Klassen dar und ist daher kein Allzweckmittel.

                PHP-Code:

                # zweckmäßig

                abstract class Vehicle
                {
                }

                class 
                Car extends Vehicle
                {
                }

                # unzweckmäßig

                class Aeroplane extends Vehicle
                {
                }

                # oder gar

                class Cat extends Vehicle
                {

                Ich hoffe du versteht, was ich meine.

                Grüße
                Nieder mit der Camel Case-Konvention

                Kommentar


                • #9
                  Original geschrieben von lord_fritte
                  Was kann den da Negatives passieren?
                  Aber geht das nicht auch mit dem extends Befehl?
                  z.B. Statik und Singleton gehören zu den einschränkenden Sprach- und Design- Mitteln. Und irgendwann in ferner Zukunft rächen sich wilkürliche Einschränkungen. Aber die Erfahrung muß jeder selber machen!
                  Wir werden alle sterben

                  Kommentar


                  • #10
                    Ich glaube ich mache es jetzt einfach so:
                    Ich erstelle eine System-Klasse dir zu Kommunikation zwischen Klassen und Script dient, und für fein arbeiten kann nun eben die System-Klasse mit den anderen Klassen kommunizieren.

                    Kommentar


                    • #11
                      Original geschrieben von lord_fritte
                      Ich erstelle eine System-Klasse dir zu Kommunikation zwischen Klassen und Script dient ...
                      hört sich nach einem God object an

                      Kommentar


                      • #12
                        Ja aber anders geht es nicht.

                        Oder ich mache doch nur eine Große Klasse.

                        EDIT:
                        Ich habe gerade mal was gestestet, ich kann doch einer Klasse eine andere Klasse übergeben?
                        z.b.:
                        PHP-Code:
                        $class1 = new klasse1();
                        $class2 = new klasse2($class1); 
                        Zuletzt geändert von lord_fritte; 01.10.2007, 17:09.

                        Kommentar


                        • #13
                          sicherlich
                          Wir werden alle sterben

                          Kommentar


                          • #14
                            Ja also dann ist es doch perfekt

                            Kommentar


                            • #15
                              Nur das Singleton oder ein anderes Pattern eventuell mehr Sinn machen ... aber naja, ist bei PHP wohl eh egal~

                              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                              Wie man Fragen richtig stellt

                              Kommentar

                              Lädt...
                              X