OOP: Objekt für alle Klassen zugänglich machen

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

  • OOP: Objekt für alle Klassen zugänglich machen

    Hallo!

    Ich habe soeben ein neues Projekt starten. Alle MySQL-Abfragen werden mit Klassen gelöst. Die Sprachverwaltung/-auswahl sollte auch mit Klassen funktionieren. Ich habe jetzt folgende Struktur:

    index.php:
    PHP-Code:
    <?php
        
    include 'class.mysql.php';
        include 
    'class.languages.php';
        
    $db = new mysql();
        
    $languages = new languages('de');
    ?>
    class.mysql.php:
    PHP-Code:
    <?php
        
    class mysql {
            function 
    mysql() {
                
    $this->connect();
            }
            function 
    connect() {
                
    //Verbindung zur Datenbank erstellen
            
    }
            function 
    query() {
                
    //Abfragen zur Datenbank bearbeiten
            
    }
        }
    ?>
    class.languages.php:
    PHP-Code:
    <?php
        
    class languages {
            function 
    languages($lang) {
                
    $this->set($lang);
            }
            function 
    set($lang) {
                
    //Sprache setzen
                
    $db->query(/*query*/);
            }
            function 
    test() {
                
    $db->query(/*query*/);
            }
        }
    ?>
    Die Sprachen sind alle in der Datenbank gespeichert. Gibt es eine Möglichkeit, $db global für ALLE Methoden in der Klasse zu setzen oder muss man bei jeder Methode immer 'global $db;' schreiben?

  • #2
    Fang bloß nicht mit dem global-Scheiß an. Das ist Pfusch und bringt dich in des Teufels Küche. Also entweder mit extends arbeiten oder du legst eine Referenz an. Und bitte orientiere dich am PHP5-Standard. Di hast da noch den alten 4er-Müll.

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Zitat von Kropff Beitrag anzeigen
      Also entweder mit extends arbeiten
      Das wäre genauso Pfusch.


      Dependency Injection wäre hier m.W. ein Stichwort.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Zitat von wahsaga Beitrag anzeigen
        Das wäre genauso Pfusch.

        Dependency Injection wäre hier m.W. ein Stichwort.
        Herrgott, der fängt doch gerade erst an. Gib ihm erst mal Zeit für die Basics. Die Feinheiten kommen dann später.

        Peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          Zitat von Kropff Beitrag anzeigen
          Herrgott, der fängt doch gerade erst an. Gib ihm erst mal Zeit für die Basics.
          Sicher, sicher ... aber ich hatte deinen Hinweis auf extends so verstanden, dass du vorschlagen wolltest, alle Klassen von einer Datenbank-Klasse erben zu lassen(?) - und das wäre ein Holzweg, von dem man nachher nur mit hohem Aufwand wieder runter kommt.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Dann versuche ich es mal:
            1. Lass den "globals" Quatsch!
            2. Besser wäre es das DB Objekt per Setter- oder Konstruktorinjektion durch zu reichen.
            3. Auch eine Registry könnte eine Lösung sein
            4. Fange gar nicht erst mit Singletone an, um globale Variablen zu ersetzen
            Wir werden alle sterben

            Kommentar


            • #7
              Zitat von Kropff Beitrag anzeigen
              Gib ihm erst mal Zeit für die Basics. Die Feinheiten kommen dann später.
              Das verstehe ich jetzt nicht. Genau mit diesem Argument könnte man entweder auch die Benutzung von global rechtfertigen oder es ist völlig von global und der Vererbung von Datenbankschnittstellen abzuraten.

              @PHP-Master07: Informier dich lieber über MVC und benutz gängige Datenbankabstraktionsklassen wie z. B. PDO. Im Script erzeugst du dann eine PDO-Instanz und übergibst sie den Fachklassen im Konstruktor.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                Zitat von wahsaga Beitrag anzeigen
                Sicher, sicher ... aber ich hatte deinen Hinweis auf extends so verstanden, dass du vorschlagen wolltest, alle Klassen von einer Datenbank-Klasse erben zu lassen(?) - und das wäre ein Holzweg, von dem man nachher nur mit hohem Aufwand wieder runter kommt.
                Um Gottes Willen. So verrückt bin selbst ich nicht.

                Peter
                Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                Meine Seite

                Kommentar


                • #9
                  Zitat von AmicaNoctis Beitrag anzeigen
                  ... könnte man entweder auch die Benutzung von global rechtfertigen
                  Das sind imho Basics.

                  Peter
                  Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                  Meine Seite

                  Kommentar


                  • #10
                    Ich glaube, ihr seid alle betriebsblind Der Thread-Ersteller kennt offensichtlich noch nicht einmal Properties, denn das ist das was er der Beschreibung nach sucht.

                    @PHP-Master07: Vergiss erstmal Begriffe wie Dependency Injection usw. und fang damit an die Basics von Objektorientierung zu verstehen, da solltest du haufenweise Material im Netz finden.

                    PHP spezifisch:
                    PHP: Eigenschaften - Manual

                    Und lass dir nicht erzählen du müsstest für Objekte Referenzen anlegen!

                    Kommentar


                    • #11
                      So zum Beispiel auf die Schnelle:

                      index.php:
                      PHP-Code:
                      <?php
                          
                      include 'class.mysql.php';
                          include 
                      'class.languages.php';
                          
                      $db = new mysql();
                          
                      $languages = new languages($db'de');
                      ?>
                      class.mysql.php:
                      PHP-Code:
                      <?php
                          
                      class mysql {
                              public function 
                      __construct() {
                                  
                      $this->connect();
                              }
                              public function 
                      connect() {
                                  
                      //Verbindung zur Datenbank erstellen
                              
                      }
                              public function 
                      query() {
                                  
                      //Abfragen zur Datenbank bearbeiten
                              
                      }
                          }
                      ?>
                      class.languages.php:
                      PHP-Code:
                      <?php
                          
                      class languages {
                              protected 
                      $_lang;
                              protected 
                      $_db;

                              public function 
                      __construct($db$lang) {
                                  
                      $this->setDb($db);
                                  
                      $this->setLang($lang);
                                  
                      $this->init();
                              }

                              public function 
                      setDb($db){
                                  
                      $this->_db $db;        
                              }

                              public function 
                      setLang($lang) {
                                  
                      $this->_lang $lang;  
                              }

                              public function 
                      init() {
                                  
                      $this->_db->query(/*query*/);
                              }

                              public function 
                      test() {
                                  
                      $this->_db->query(/*query*/);
                              }
                          }
                      ?>
                      Simploo CMS - das einfache Webseiten-Bearbeitungsprogramm

                      Kommentar


                      • #12
                        Danke für eure nützlichen Tipps.

                        @fab-s: Jetzt weiß ich endlich, was ich noch lernen muss. Danke.

                        @eintrachtemil: Danke für die anschaulichen Beispiele! Sie haben mir sehr geholfen.

                        Kommentar

                        Lädt...
                        X