Classen und OOP Problem

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

  • Classen und OOP Problem

    Hallo Zusammen.

    Ich versuche mich gerade in Classen Programmierung einzufinden,
    habe aber noch ein Paar kleine Probleme damit.

    Folgenes Problem habe ich.

    Sagen wir ich besitze x Classen, eine davon soll eine MainClass sein.

    Beispiel

    Class DataBase
    Class SessionManager
    Class MemberManager
    Class Security
    Class CoreSystem (Hauptclass)

    In jeder Class sind bestimmte Funktionen drin und Fast Jede Class muss mal auf die DataBase und Session zugreifen
    Security z.b. auf DataBase,Session,MemberManager etc

    Das CoreSystem z.b. sollte auf Alle Funktionen zurückgreifen können.

    Folgenes hab ich mal Probiert aber so richtig funktioniert das nicht

    PHP-Code:
    Class CoreSystem
    {
         var 
    $DB '';
         var 
    $SESS'';
         var 
    $MEMBER='';

         Function 
    CoreSystem()
         {
               
    $this->DB = & new DataBase();
               
    $this->SESS = &new SessionManager();
               
    $this->MEMBER = & new Member();
         }

    Wie man sieht soll bei der Initialisierung von dem CoreSystem die Restlichen Classen Initialisiert werden

    Was muss ich nun machen das ich in MemberManager z.b. eine Funktion von CoreSystem benuztzen will b.z. im CoreSystem eine Funktion der DatenBank brauche oder umgekehrt.

    Ich hoffe ihr versteht mein Anliegen, ich weiss jetzt nicht so recht wie ich
    besser ausdrücken könnte.

    Gruss und Danke im Vorraus
    Windows kann alles dank 32Bit.
    Nach 32Bit, glaube ich auch das ich alles kann..

  • #2
    "Hauptclass" im Sinne von Vererbung?

    Wenn ja:
    PHP-Code:
    class coresystem {
      var 
    $db NULL;
      var 
    $session NULL;

      function &
    get_db() {
        return 
    $this->db;
      }

      function &
    get_session() {
        return 
    $this->session;
      }

      function 
    output_db() {
        
    print_r($this->db);
      }


    das kannst du in allen abgeleiteten Klassen aufrufen


    "Hauptclass" im Sinne von Framework/whatever:
    PHP-Code:
    class coresystem {
      var 
    $db NULL;
      var 
    $session NULL;

      function 
    core_system() {
        
    $this->db = &new sessionmanager;
        
    $this->db->set_core($this);

        
    $this->session = &new database;
        
    $this->session->set_core($this);
      }

      function &
    get_db() {
        return 
    $this->db;
      }

      function &
    get_session() {
        return 
    $this->session;
      }

      function 
    output_db() {
        
    print_r($this->db);
      }

    }

    class 
    database {
      var 
    $core NULL;

      function 
    set_core(&$core) {
        
    $this->core = &$core;
      }

      function 
    print_session() {
        
    print_r($this->core->session);
      }

    so irgendwie, wichtig sind immer die &
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Hallo.

      Erstes Beispiel habe ich nicht so wirklich verstande, das zweite aber schon deutlich besser.

      Ich werd das Direkt mal Testen und gleich nochmal das ergebniss Posten.

      EDIT

      Ich habe es gerade mal angetestet das 2te Beispiel klappt jetzt und ich
      Kann genau das machen was ich vor hatte.

      ALLerdings macht mich jetzt in der MemberManagerClass folgene Zeile
      etwas Stuzig

      PHP-Code:
      $result=$this->CORE->DB->query(....); 
      Ich denke mal mit Vererbung was das doch bestimmt
      etwas einfacher ? oder vertu ich mich da jetzt ein bischen ?
      Zuletzt geändert von Cyrus1972; 23.08.2005, 15:10.
      Windows kann alles dank 32Bit.
      Nach 32Bit, glaube ich auch das ich alles kann..

      Kommentar


      • #4
        geh doch in deiner class hin und schreibe folgendes ...

        PHP-Code:
        $this->db = &$this->CORE->DB
        dann kannst du das dann so abfragen ...

        PHP-Code:
        $result $this->db->query(....); 
        hast halt eine ebene beim tippen gespart. ;-)
        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


        • #5
          Okay danke für den Hinweis
          Windows kann alles dank 32Bit.
          Nach 32Bit, glaube ich auch das ich alles kann..

          Kommentar


          • #6
            Original geschrieben von mrhappiness
            wichtig sind immer die &
            wieso eigentlich? klassen werden doch nicht kopiert sondern es wird (so weit ich weiss) ein internet pointer gesetzt? oder sehe ich das falsch?
            wenn man
            PHP-Code:
            public function get()
            {
               return 
            $this->DBClass;
            }
            ...
            $db $mainIrgendwas->get(); 
            dann arbeitet man doch noch immer mit dem selben Objekt...?

            Kommentar


            • #7
              Original geschrieben von kuebel-s
              wieso eigentlich? klassen werden doch nicht kopiert sondern es wird (so weit ich weiss) ein internet pointer gesetzt? oder sehe ich das falsch?
              wenn man
              PHP-Code:
              public function get()
              {
                 return 
              $this->DBClass;
              }
              ...
              $db $mainIrgendwas->get(); 
              dann arbeitet man doch noch immer mit dem selben Objekt...?
              Lass dir mal folgendes durch den kopf gehen:
              PHP-Code:
              $a 2;
              $b $a
              $b ist in diesem fall eine kopie von $a

              PHP-Code:
              $a 2;
              $b =&$a
              $b zeigt in diesem fall auf $a. ändert sich der wert von $a, wird sich der wert auch in $b ändern. und genauso ist das auch in klassen.

              wenn dir das nicht einleuchtet, würde ich dir folgenden link vorschlagen: Referenzen in PHP

              gretz
              rl

              Kommentar


              • #8
                wieso eigentlich? klassen werden doch nicht kopiert sondern es wird (so weit ich weiss) ein internet pointer gesetzt?
                Objekte werden erst seit PHP5 als Referenz übergeben, unter PHP4 wird standardmäßig eine Kopie bei Übergabe erstellt. Daher ist unter PHP4 die explizite Angabe von & sinnvoll - sofern man nicht wirklich eine Kopie benötigt.

                gruss Markus
                Simploo CMS - das einfache Webseiten-Bearbeitungsprogramm

                Kommentar


                • #9
                  Original geschrieben von reallife
                  Lass dir mal folgendes durch den kopf gehen:
                  PHP-Code:
                  $a 2;
                  $b $a
                  $b ist in diesem fall eine kopie von $a

                  PHP-Code:
                  $a 2;
                  $b =&$a
                  $b zeigt in diesem fall auf $a. ändert sich der wert von $a, wird sich der wert auch in $b ändern. und genauso ist das auch in klassen.

                  wenn dir das nicht einleuchtet, würde ich dir folgenden link vorschlagen: Referenzen in PHP

                  gretz
                  rl
                  habe nicht umsonst geschrieben "klassen werden doch nicht kopiert". bei variablen ist es mir klar...

                  @eintrachtemil
                  Objekte werden erst seit PHP5 als Referenz übergeben, unter PHP4 wird standardmäßig eine Kopie bei Übergabe erstellt. Daher ist unter PHP4 die explizite Angabe von & sinnvoll - sofern man nicht wirklich eine Kopie benötigt.
                  danke, dass macht sinn. habe das auf meinem php5-server getestet, deswegen wohl

                  Kommentar


                  • #10
                    deswegen musst du aber den kompletten post nicht quoten.
                    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

                    Lädt...
                    X