Klassen in PHP

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

  • Klassen in PHP

    Ich habe folgende Frage zu Klassen und PHP. Schaut euch einfach mal folgenden Beispielcode.

    PHP-Code:
    class main {
      var 
    $user = new user;
      var 
    $connection = new db;
    }

    class 
    db {
      function 
    connect() {
      }

      function 
    select() {
      }
    }

    class 
    user {
      var 
    $username null;

      function 
    load_settings() {
        
    main::connection->select();
      }

    Stimmt das von der Syntax??? Jetzt mal zu meiner Frage.
    Ich habe ein Objekt, meine Mutterklasse. Dieses Objekt hat z. B. 2 Eigenschaften, user und connection. Diese 2 Eigenschaften sind allerdings auch wieder Objekte. Die Eigenschaft connection ist z. B. meine Datenbank connection. In dem Objekt handle ich alle Select, Updates, etc.
    Diese möchte ich jetzt aber auch in der Eigenschaft $this->user des Mutterobjektes vom Typ user benutzen. Funktioniert das mit
    PHP-Code:
    main::connection->select(); 
    ??? Oder muss ich dann her gehen und die Klasse user von der Klasse db ableiten???
    Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info

  • #2
    Abend!
    Also das objekt-orientierte PRogrammieren ist bis jetzt von PHP nur äusserst rudimentär unterstützt!
    Das heisst, Features wie Vererbung gibt es im derzeitigen Release überhaupt noch nicht! Vielleicht tut sich da aber was im ersten Release von PHP5.
    Das heisst, ableiten wird wohl nicht funzen
    Also kannst du es nur so probieren, wie du es jetzt schon tust

    Kommentar


    • #3
      Original geschrieben von Op@ U.

      Das heisst, Features wie Vererbung gibt es im derzeitigen Release überhaupt noch nicht!
      wer hat dir denn das erzählt ?
      Ableiten und Vererbung klappt wunderbar!
      PHP-Code:
      class xyz extends abc{} 
      TBT

      Die zwei wichtigsten Regeln für eine berufliche Karriere:
      1. Verrate niemals alles was du weißt!


      PHP 2 AllPatrizier II Browsergame

      Kommentar


      • #4
        Morgeeen!

        Ja sry, hast recht. Vererbung wird natürlich unterstützt.
        Was noch nicht geht, aber eindeutig zum OOP-Ansatz dazu gehört ist die Kappselung der Daten. Die funzt bei PHP4 leider noch nicht, soll aber in PHP5 "verwirklicht" werden.
        Ebenfalls in PHP5 sollen noch die folgenden Dinge enthalten sein:

        Features der Zend Engine 2 [list=a][*]Exception Handling[*]Object Cloning[*]Konstruktoren & Destruktoren[*]Implizite Referenzierung von Objektinstanzen[*]Objekt-Dereferenzierung[*]Verbesserte OO-Verhaltensweise (PHP führt OO-Code bis zu 30-50% schneller aus)[/list=a]

        Kommentar


        • #5
          Original geschrieben von Op@ U.
          Features der Zend Engine 2 [list=a][*]Exception Handling[*]Object Cloning[*]Konstruktoren & Destruktoren[*]Implizite Referenzierung von Objektinstanzen[*]Objekt-Dereferenzierung[*]Verbesserte OO-Verhaltensweise (PHP führt OO-Code bis zu 30-50% schneller aus)[/list=a]
          - Exception Hanling mußte derzeit noch selber was machen
          - Object Cloning mußte genauso wie bei C++ einen eigene Copy-Methode schreiben (unter C++ dann meist einen Copy-Konstruktor)
          - Konstruktoren und Destructoren werden von PHP unterstützt, der Destructor wird aber nicht automatisch aufgerufen. Außerdem wird der Konstruktor der Vaterklasse nicht automatisch aufgerufen, wenn die abgeleitete Klasse einen Konstruktor besitzt.

          was mir fehlt ist,
          dass Überladen von Methoden und Konstruktoren, sowie die privaten Membervariablen (Datenkapselung)
          TBT

          Die zwei wichtigsten Regeln für eine berufliche Karriere:
          1. Verrate niemals alles was du weißt!


          PHP 2 AllPatrizier II Browsergame

          Kommentar


          • #6
            Ich würde es so versuchen.



            PHP-Code:
            class main {


            function 
            main() {
            $this->user();
            $this->db();
            }

            function 
            user() {
            $username null;
            }

            function 
            load_settings() {
            $this->select();
            }

            function 
            db() {
            $this->connect();
            $this->select();
            }

            function 
            connect() {
            /*
            CODE
            */
            }

            function 
            select() {
            /*
            CODE
            */
            }

            }
            #Ende der Klasse


            $klasse = new main();
            /*
            usw.
            */ 

            Keine Ahnung was du genau machen willst.....aber ich hoffe ich konnte Dir damit weiterhelfen. Falls Du noch hilfe brauchst meld Dich nochmal.


            Bis dann

            is_real
            Zuletzt geändert von is_real; 23.12.2002, 15:14.
            [font=tahoma]
            Agentursoftware
            Zend Framework Resource
            FM4 Sammelalbum


            "The most important part of the work is the beginning" - Plato
            "..so dance while you still have feet and smile while you still have teeth.." - Caesars[/font]

            Kommentar


            • #7
              Ne, du hast da leider etwas falsch verstanden. In deinem Beispiel sind alle Eigenschaften und Methoden fest in der Klasse "Main" verankert. Das möchte ich jedoch nicht. Bei mir sollte das ganze so aussehen.

              Es gibt 3 Klassen. Eine Mutterklasse, die den Core meiner Applikation bildet. Dann gibt es eine Klasse db, die die Verbindung zur Datenbank handelt. Und die Klasse user, die den Benutzer Abbildet.

              Erstelle ich ein Objekt der Klasse Mutterklasse, habe ich ein Objekt mit der Eigenschaft $connection und $user..

              $connection ist eine Instanz von db und $user ist eine Instanz von der Klasse user.

              Nachdem jeweils eine Instanz von user und db besteht, hat das Mutterobjekt die Fähigkeit mit einem Datenbankserver zu kommunizieren. Desweiteren verfügt das Mutterobjekt auch über einen Benutzer ($this->user).

              Aber ich möchte, das die Eigenschaft $this->user von der Klasse user auch auf die Funktionalität von Mutterobjekt::connection zugreifen kann.

              Jetzt einigermßen verständlich?
              Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info

              Kommentar


              • #8
                dann solltest du Referenzen verteilen
                PHP-Code:
                class db{
                    var 
                $user;
                    function 
                db(&$_user){
                        
                $this->user = &$_user;
                    }
                    function 
                connect(){}
                    function 
                select(){}
                }

                class 
                user{
                    var 
                $username$db;
                    function 
                load_settings(){
                        
                $this->db->select("...");
                    }
                    function 
                set_db(&$_db){
                        
                $this->db = &$_db;
                    }
                }

                class 
                main{
                    var 
                $user$connection;
                    function 
                main(){
                        
                $this->user = new user();
                        
                $this->connection = new db($this->user);
                        
                $this->connection->set_db($this->db);
                    }

                TBT

                Die zwei wichtigsten Regeln für eine berufliche Karriere:
                1. Verrate niemals alles was du weißt!


                PHP 2 AllPatrizier II Browsergame

                Kommentar


                • #9
                  OK, das sieht doch nach was aus. Das werde ich mir mal genauer anschauen.
                  Gibt es zu dem Thema in der PHP referenz was? Oder in sonstigen Online Dokumenten? Wenn ja, kannst du dann bitte nen Link oder sowas posten.

                  Aber hast mir sehr weiter geholfen, danke!!
                  Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info

                  Kommentar


                  • #10
                    such mal hier im Forum, zu Klassen und Referenzen hatte ich mich schonmal ausführlich ausgelassen
                    TBT

                    Die zwei wichtigsten Regeln für eine berufliche Karriere:
                    1. Verrate niemals alles was du weißt!


                    PHP 2 AllPatrizier II Browsergame

                    Kommentar


                    • #11
                      OK, danke vielmals für eure Hilfe!

                      Frohes Fest!!!
                      Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info

                      Kommentar

                      Lädt...
                      X