Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zum Thema "MySQL-Klasse im CMS"

Einklappen

Neue Werbung 2019

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

  • Frage zum Thema "MySQL-Klasse im CMS"

    Hallo,

    wie sollte man das am besten mit der MySQL-Klasse im CMS regeln? Momentan erstelle ich in JEDER klasse ein MySQL-Objekt, doch ich glaub das ist ja wohl nicht wirklich optimal, da muss es eine besser Lösung geben! Welche wäre das?

    lg
    Anwendungsentwicklung: Python, C, C++, Java
    Webentwicklung: (X)HTML, CSS, PHP, MySQL


  • #2
    Ich löse das so:

    aus meiner config.inc.php
    PHP-Code:
    /*
     * Einbinden der Datenbankklasse 
     */
    require PATH_CLASS."/class.db.php";
    $obj_db = new DB(HOSTUSERPWDBNAME);
    $obj_db->connect(); 
    und eine Klasse:
    PHP-Code:
    class GB{
        private 
    $obj_db     null;
        
        public function 
    __construct($obj_db)
        {
            
    $this->obj_db         $obj_db;
        } 
    und in allen aufgerufenen *php. dateien die Klassen benötigen:
    PHP-Code:
    require '../includes/config.inc.php' 
    So läuft es bei mir und ich habe nur ein Objekt erstellt.

    V.G.
    Frank - ae
    Mein Projekt: www.my-matrix.de

    Kommentar


    • #3
      Hallo dennito,

      an sich sollte eine MySQL-Klasse den Zugriff auf eine Datenbank abstrahieren und sich um Themen wie Verbindungsaufbau und -Abbau kümmern. Evtl. ist es ratsam, Methoden zu inkludieren, die dir eingegebene Werte escapen (Stichwort: SQL-Injections).

      Was die Erstellung in deinen Objekten angeht, so würde ich hier noch ein Singleton drumrum bauen. Das hat den Vorteil, dass du nur eine Verbindung aufbauen musst, was deutlich performanter ist. Benötigst du mehrere Verbindungen, lässt sich soetwas mit einem ConnectionManager regeln, der Datenbank-Verbindungen für dich verwaltet. So ist es auch komfortabel möglich innerhalb einer Anwendung mehrere Datenbanken über die gleiche Schnittstelle zu adressieren.

      Hier noch einige Anregungen zum Thema:
      * Adventure PHP Framework (core): MySQLHandler Class Reference
      * Adventure PHP Framework - KlassenReferenz MySQLHandler
      * Adventure PHP Framework - Klassenreferenz connectionManager

      Solltest du weitere Fragen haben oder noch zusätzliche Anregungen brauchen, dann immer her damit!
      Viele Grüße,
      Dr.E.

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      1. Think about software design before you start to write code!
      2. Discuss and review it together with experts!
      3. Choose good tools (-> Adventure PHP Framework (APF))!
      4. Write clean and reusable software only!
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      Kommentar


      • #4
        So, erstmal danke für Eure schnellen und hilfreichen Antworten.

        Zitat von dr.e. Beitrag anzeigen

        Was die Erstellung in deinen Objekten angeht, so würde ich hier noch ein Singleton drumrum bauen. Das hat den Vorteil, dass du nur eine Verbindung aufbauen musst, was deutlich performanter ist. Benötigst du mehrere Verbindungen, lässt sich soetwas mit einem ConnectionManager regeln, der Datenbank-Verbindungen für dich verwaltet. So ist es auch komfortabel möglich innerhalb einer Anwendung mehrere Datenbanken über die gleiche Schnittstelle zu adressieren.
        Das heißt, ich würde beispielsweise meiner MySQL-Klasse eine singleton()-Methode inkludieren? (habe mir mal kurz bei de.php.net Pattern angeschaut) Okay, dann kann ich zwar nur ein MySQL-Objekt erzeugen, aber doch nur in meinem aktuellen Script, oder? Dann hätte ich ja trotzdem in jeder anderen Klasse ein MySQL-Objekt. Oder ich mach es wie es frank-ae beschrieben hat?! Ich blicke noch nicht ganz den Sinn von singleton bzw. Pattern.
        Anwendungsentwicklung: Python, C, C++, Java
        Webentwicklung: (X)HTML, CSS, PHP, MySQL

        Kommentar


        • #5
          Hallo dennito,

          Das heißt, ich würde beispielsweise meiner MySQL-Klasse eine singleton()-Methode inkludieren?
          Das kommt auf die Umsetzung an. Leitest du alle Klassen, die singleton erzeugt werden sollen von einer abstrakten Singleton-Klasse ab, musst du diese natürlich einbinden und von dieser ableiten. Verwendest du ein generisches Singleton (z.B. wie unter Adventure PHP Framework - Klassenreferenz Singleton SessionSingleton beschrieben), musst du dieses zwar einbinden, jedoch gestaltet sich die Verwendung etwas anders.

          Okay, dann kann ich zwar nur ein MySQL-Objekt erzeugen, aber doch nur in meinem aktuellen Script, oder? Dann hätte ich ja trotzdem in jeder anderen Klasse ein MySQL-Objekt. Oder ich mach es wie es frank-ae beschrieben hat?! Ich blicke noch nicht ganz den Sinn von singleton bzw. Pattern.
          Ein Singleton garantiert dir doch, dass du nur exakt ein Objekt der entsprechenden Klasse hast. Selbst wenn du an 100 Stellen

          PHP-Code:
          $mySQL = &Singleton::getInstance('MySQL'); 
          schreibst, ist das immer ein und das selbe Objekt, das ich $mySQL referenziert ist. Damit schreibst du zwar an 100 Stellen den obigen Ausdruck hin, kannst jedoch immer ein und dasselbe Objekt und somit dessen Informationen (z.B. Datenbank-Verbindung) nutzen.

          Nun klar?
          Viele Grüße,
          Dr.E.

          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          1. Think about software design before you start to write code!
          2. Discuss and review it together with experts!
          3. Choose good tools (-> Adventure PHP Framework (APF))!
          4. Write clean and reusable software only!
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

          Kommentar


          • #6
            Die Diskussion gabs doch gerade erst.

            Im Hinblick darauf, @ Doc: Wie parameterisierst Du denn Singletons wie Datenbankobjekte ohne die Daten bei jedem getInstance () bereitzuhalten?

            Pauschal Verbindung am Start des Scripts aufbauen oder wie?
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              Zitat von nikosch
              Im Hinblick darauf, @ Doc: Wie parameterisierst Du denn Singletons wie Datenbankobjekte ohne die Daten bei jedem getInstance () bereitzuhalten?
              Ich nutze für diese Angelegenheiten Singleton + Fabric. Der ConnectionManager erzeugt mir an Hand eines Keys (->Konfiguration) eine Instanz eines Datenbank-Objektes. Das sieht so aus:

              PHP-Code:
              import('core::database','connectionManager'); 
              $cM = &$this->__getServiceObject('core::database','connectionManager'); 
              $dbDriver = &$cM->getConnection('driver_name'); 
              Die Methode
              __getServiceObject() instanziiert mir den connectionManager singleton. Dieser verwaltet die DB-Connections, die damit auch singleton sind. Nachzulesen unter http://dev.adventure-php-framework.o...er#2-Anwendung.
              Mit dieser Vorgehensweise realisiere ich auch den Zugriff auf mehrere unterschiedliche Datenbanken innerhalb einer Applikation/eines Moduls.

              Nachtrag: üblicherweise gestalte ich den Connection-Key in der Konfiguration der Anwendung konfigurierbar (herrliches Deutsch ), damit ich im Betrieb der Anwendung in der Wahl der Datenbank frei bin.
              Viele Grüße,
              Dr.E.

              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              1. Think about software design before you start to write code!
              2. Discuss and review it together with experts!
              3. Choose good tools (-> Adventure PHP Framework (APF))!
              4. Write clean and reusable software only!
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

              Kommentar


              • #8
                Alles klar. So in etwa handhabe ich das auch.
                --

                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                --

                Kommentar


                • #9
                  So, ich habe mir jetzt mal eine abstrakte Singleton-Klasse geschrieben und eine Klasse davon abgeleitet. Siehe unten.
                  PHP-Code:
                  function __autoload($class_name) {
                          require_once 
                  './class/' $class_name '.class.php';
                      }

                      abstract class 
                  Singleton {
                          
                          protected static 
                  $class_name;
                          protected static 
                  $instance;
                          
                          private function 
                  __construct() {
                          }
                          
                          public function 
                  getInstance($class_name) {
                              
                  self::$class_name $class_name;
                              
                  self::$instance = new self::$class_name;
                              
                              return 
                  self::$instance;
                          }
                          
                      }
                      
                      class 
                  Human extends Singleton {
                          
                          public function 
                  say($word) {
                              echo 
                  $word;
                          }
                          
                      }
                      
                      
                  $human = &Singleton::getInstance('Human');
                      
                  $human->say("WHAT?"); 
                  1. Eigentlich ist in diesem Falle eine Abstrakte Klasse sinnlos, oder? Hätte man doch eigentlich auch als "normale" Klasse deklarieren können.

                  2. Nun weiß ich leider nicht wie ich prüfe, ob es in meinem Projekt wirklich nur eine Instanz der Klasse Human gibt.
                  Anwendungsentwicklung: Python, C, C++, Java
                  Webentwicklung: (X)HTML, CSS, PHP, MySQL

                  Kommentar

                  Lädt...
                  X