[OOP] In einer Klasse eine andere Klasse verwenden?

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

  • #16
    schaue dir mal die beiden letzten postings an. die sind dir wohl bei deiner antwort zeitgleich entstanden....
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #17
      Jo sind sie

      Aber mein letztes Post war auch als Antwort für antman gedacht

      Aber danke Jungs,
      ich finde sowas sollte irgendwo auf dieser Seite auch als Tutoiral zu finden sein, denn ich denke mal ich bin nicht der einzigste mit diesem Prob.


      Greetz JamieWolf
      Nicht jeder der viele Posts hat weiß auch viel

      Kommentar


      • #18
        ein tut?

        ich habe den o.g. thread mit der suchfunktion in ~20sec gefunden ...
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #19
          Original geschrieben von JamieWolf
          Ganz einfach, die DB klasse brauche ich ja nicht nur in der Klasse TEST, sondern auch wo anders.
          Wie man in meinem Post über deinem sehen kann

          Und der Mehr verbrauch an Speicher ist einfach da dass wenn DB schon existiert es nochmal zu erzeugen in TEST
          Also hab ich dann kurzfristig zumindestens 3 Objekte im Speicher. Nun rechne mal hoch, wenn 100 User online sind und die gleiche Seite abfragen, dann hast du 100 Objekte mehr im Speicher (2 * 100 - 3 * 100 = 100 ) und je nach dem wie groß diese Objekte sind kann es da schon zu erheblichen Speichereinbußen kommen.

          Bin zwar noch a bissel a Noob, aber dass schnall selbst ich

          Also ich denke wir reden hier total aneinander vorbei.
          Ich meinte damit nicht das Objekt in der Test Klasse nochmal zu erzeugen. Sondern dass das eine das andere auschließt.
          Natürlich brauch man nicht 2 mal new db();
          Ich meine das generell . Vielleicht brauch ich im Hauptskript nicht die DB Klasse aber in einem anderen Skript.
          Jetzt verstanden ?
          Pickel ? Übergewicht ? Depressionen ?
          Brot, Kartoffeln und Milch sind Gift!
          http://www.paleofood.de

          Kommentar


          • #20
            Hm, wo ist denn eigentlich das problem ?

            Wieso geht das nicht so ?


            new db();
            new test();

            class test
            {
            ....
            function braucht_db_funktion()
            {
            $ergebnis = $db->funktion();
            }


            Oder hab ich da was falsch verstanden ?


            An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

            Kommentar


            • #21
              @Abraxas

              nach was hast du gesucht, denn ich hab mich 20min rumgequält ohne diesen Thread zu finden

              @Antman
              Haben wir anscheinend. Aber is ja auch wurscht So stimmts oder besser so geht's nu
              Nicht jeder der viele Posts hat weiß auch viel

              Kommentar


              • #22
                es geht um: "wie kommt $db in die funktion?"

                entweder per global
                oder per referenz
                oder per instanziieren in der funktion


                global: scheiße und unsauber
                referenz: wenn $db auch an anderenstellen verwendet wird, z. b. im hauptskript
                instanziieren: wenn $db nur in der funktion verwendet wird
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #23
                  Original geschrieben von JamieWolf
                  @Abraxas
                  nach was hast du gesucht, denn ich hab mich 20min rumgequält ohne diesen Thread zu finden
                  bitte mit [color=red]x[/color] am ende.

                  ich habe nach init( gesucht ...
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #24
                    Was hat ein Objekt innerhalb eines anderen Objekts verloren ?

                    Wenn ich es nur innerhalb einer Klasse brauch, dann kann ich es doch auch in der Klasse selbst anlegen und dann einer vorbereiteten Variable geben:

                    class test {

                    var $obj;

                    function test()
                    {
                    $obj = new db();
                    }
                    }

                    Global isses doch nicht "unsauber", sondern entspricht der OOP-Programmeriung:

                    Objekte sind im Speicher, die Daten und Funktionen jeweils gekapselt.
                    Soll ein Objekt auf das andere zugreifen, schickt man sich Botschaften (aufrufen der Memberfunktionen), und "vereinnahmt" das andere objekt doch nicht ?

                    Oder bin ich jetzt völlig verblödet 0_o

                    cya max


                    An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                    Kommentar


                    • #25
                      Original geschrieben von MaxP0W3R
                      Oder bin ich jetzt völlig verblödet 0_o
                      no comment ...
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #26
                        Also, nochmal anderes. Jetzt ist mir eine bessere Erklärung eingefallen.

                        Klassen dienen doch dazu wiederverwertbaren Code zu schreiben.
                        Wenn ich aber nun im Hauptskript gar nicht das DB Objekt benötige sondern nur in der Testklasse, wäre ja eigentlich angebracht, das DB Objekt im Konstruktor zu instantieren.

                        Was ist aber nun wenn ich die Testklasse in einem anderen Projekt wiederverwenden will ? Ich meine wenn ich das DB Objekt ja im Konstruktor der Test Klasse erzeuge ist das kein wiederverwertbarer Code mehr. Denn dann muss ich ja vorher den Pfad inkludieren. Bei größeren Projekten weiß man dann nicht mehr welche anderen Datein noch mitnehmen muss, wenn man eine Klasse wiederverwenden möchte.

                        Ist ein bischen schwer zu erklären. Wurde mein (Verständinis)-Problem
                        verstanden ?

                        Man kann ja in UML verdeutlichen, welche Klasse welche andere kennt.
                        Wie ist das zu verstehen. Wenn ich nun eine Klasse pro Datei habe. Heißt das dann, dass es so geschrieben werden muss ?

                        require ("../andereklasse.php.");
                        class Klassenname {
                        }

                        Mal ein Beispiel. Angenommen in einem Projekt Bäckerei gibt es die Klassen Abrechnung, Bäcker, Brötchen, Brot & Warenkorb.

                        Bäcker ist das einzige Objekt das mit der Klasse Brot etwas anfangen kann. Sollte man im Konstruktor von Bäcker dann das Objekt Brot erzeugen, weil es vom Bäcker immer benötigt wird?
                        Oder besser im Hauptskript, das auch "Bäcker" instantiert ?
                        OK, in diesem Fall ist es vielleicht offensichtlicher, aber manchmal weiß man ja nicht, ob man eine Klasse evtl. in Zukunft wiederverwenden wird.
                        Pickel ? Übergewicht ? Depressionen ?
                        Brot, Kartoffeln und Milch sind Gift!
                        http://www.paleofood.de

                        Kommentar


                        • #27
                          Na dolle Abraxax darauf wäre ích nie gekommen, nach init( zu suchen ....

                          Ich hab nach Klasse in Klasse gesucht oder sowas
                          Deswegen bin ich Pro Tut
                          Nicht jeder der viele Posts hat weiß auch viel

                          Kommentar


                          • #28
                            Jetz habe ich verstanden.

                            Um es nach meinem OOP-verständnis her zu lösen machst du das so:

                            Objekt Bäckergrundform, Brot, Kuchen, Torte

                            Jeweils als klasse schreiben

                            für dein Projekt machst du eine Klasse Bäcker, die ALLE funktionen von Bächergrundform übernimmt und zusätzlich implementierst du funktionen und var um mit dem Objekt Brot umzugehen.

                            Genau das selbe für torten:

                            anderes projekt, Bäcker soll nur Torten machen:

                            Klasse Bäckergrundform ableiten und mit den Funktionen erweitern, die mit der Torte umgehen.

                            Bäckergrundform enthält nur Funktionen und Variablen, die wirklich zum reinen Bäcker gehören, z.B. öffne_backofen(), stelle_temperatur_ein() usw

                            Und für den spezialfall leitest du den bäcker in der grundform ab und erweiterst ihn, und wenn nötig überschreibst du einige Funktionen mit neuen Funktionen für den Spezialfall (geht das schon in PHP 5 ? )

                            So, und nur so, ist eine Klasse wiederverwendbar, alles andere wäre ja schon zu speziell

                            cya max


                            An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                            Kommentar


                            • #29
                              Original geschrieben von JamieWolf
                              darauf wäre ích nie gekommen, nach init( zu suchen ....
                              ich weiss. nur fiel mir nichts besseres dazu ein ....
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar


                              • #30
                                Original geschrieben von mrhappiness
                                es geht um: "wie kommt $db in die funktion?"

                                entweder per global
                                oder per referenz
                                oder per instanziieren in der funktion


                                global: scheiße und unsauber
                                referenz: wenn $db auch an anderenstellen verwendet wird, z. b. im hauptskript
                                instanziieren: wenn $db nur in der funktion verwendet wird
                                Global ist natürlich außer Frage. Hat ja nix mit OOP zu tun.
                                Du meinst mit Funktion Konstruktor? Denn darum geht es ja.

                                Ist das DB Objekt ein fester Member von Test ? Dann könnte man den ja im Konstruktor von Test erzeugen, wenn es im hauptskript nicht verwendet wird. Wie ist es aber dann, wenn ich Test in einem anderen Webprojekt wiederverwenden möchte aber nicht mit einer mysql DB sondern postgres. Das ist die Klasse schon mal Müll. OK, das könnte man noch abändern, aber bei größeren Projekten wäre das doch zu viel Aufwand.
                                Pickel ? Übergewicht ? Depressionen ?
                                Brot, Kartoffeln und Milch sind Gift!
                                http://www.paleofood.de

                                Kommentar

                                Lädt...
                                X