php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.12.2008, 13:12  
Benutzer
 
Registriert seit: 22.06.2008
Beiträge: 30
dennito ist zur Zeit noch ein unbeschriebenes Blatt
Standard 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
dennito ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.12.2008, 15:12  
Benutzer
 
Registriert seit: 24.09.2008
Beiträge: 52
frank-ae befindet sich auf einem aufstrebenden Ast
frank-ae eine Nachricht über Yahoo! schicken frank-ae eine Nachricht über Skype™ schicken
Standard

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
frank-ae ist offline  
Alt 20.12.2008, 15:16  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

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!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 20.12.2008, 19:35  
Benutzer
 
Registriert seit: 22.06.2008
Beiträge: 30
dennito ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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

Zitat:
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.
dennito ist offline  
Alt 20.12.2008, 19:47  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo dennito,

Zitat:
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.

Zitat:
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!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 20.12.2008, 21:09  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

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?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (20.12.2008 um 21:13 Uhr).
nikosch ist gerade online  
Alt 20.12.2008, 21:33  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
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!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Geändert von dr.e. (20.12.2008 um 21:34 Uhr). Grund: Nachtrag hinzugefügt!
dr.e. ist offline  
Alt 20.12.2008, 22:31  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Alles klar. So in etwa handhabe ich das auch.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 21.12.2008, 00:47  
Benutzer
 
Registriert seit: 22.06.2008
Beiträge: 30
dennito ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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.
dennito ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Methode einer anderen Klasse aufrufen Luka PHP-Fortgeschrittene 15 09.11.2008 14:19
Klasse aus externer Klasse aufrufen kostja PHP Tipps 2008 8 07.08.2008 14:13
[Erledigt] Thema anpinnen und Thema als gelesen markieren? litterauspirna PHP Tipps 2008 27 04.08.2008 11:19
Neues Thema und Eröffnungspost richtig zueinander in 2 Tabelen eintragen? litterauspirna PHP Tipps 2008 8 25.06.2008 13:37
Variable aus Klasse herausbekommen GSJLink PHP Tipps 2008 7 16.02.2008 22:25
String-Parser Klasse - was muss rein? Matze PHP Tipps 2007 2 08.04.2007 22:14
Allgemeine Frage zum Thema Upload mit PHP pino PHP Tipps 2006 6 18.07.2006 21:51
mehr als eine Klasse einbinden Alpha Centauri PHP-Fortgeschrittene 4 13.04.2006 20:56
Schräge Frage zum Thema Dateiupload mit php PHP-Fortgeschrittene 18 29.12.2005 23:24
Instanz einer Klasse in einer anderen Klasse verwenden Buhmann PHP-Fortgeschrittene 7 28.10.2005 23:12
Frage zum Thema "Admin Center" in einem Gästebuch PHP Tipps 2005 2 27.05.2005 17:08
Grundlagen Frage || Klasse ?? nsane PHP Tipps 2004-2 1 13.12.2004 18:00
Klasse ändern UniQ PHP Tipps 2004 5 24.08.2004 14:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
cms mehrere datenbanken

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:39 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum