php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.12.2008, 12:31  
Neuer Benutzer
 
Registriert seit: 22.11.2007
Beiträge: 15
Luka
Standard Singleton Pattern Verstaendisproblem

Hi,

ich versuche mich immer noch mit meiner ersten Klasse und bin nun auf das Singleton Pattern gestossen. Da ich in meiner Login Klasse natuerlich das DB Object brauche um Daten aus der DB zu lesen, gibt es ja wohl verschiedene Wege. Mir wurde dann gesagt ich koennte das Object vorher erzeugen und dann beim Erzeugen des Login Objects das DB Object an den Konstruktor uebergeben. Danach kann ich dann ja ohne Probleme in meiner Login Klasse die DB Verbindung nutzen.

Beim Surfen durchs Netz bin ich nun jedoch auf Singleton gestossen und dachte mir das dies noch besser passen wuerde. Also habe ich meine DB Klasse mit dieser Funktion erweitert.

PHP-Code:
  // Die Singleton Funktion
    
public static function singleton()
    {
        if (!isset(
self::$instance)) {
            
$c __CLASS__;
            
self::$instance = new $c;
        }

        return 
self::$instance;
    } 
In meiner indexp.php gab es ja nun urspruenglich diesen Part

$object=new MySQL ($dbhost,$dbuser,$dbpass,$dbname);

$object wurde dann ja an new Login uebergeben. In der Login Klasse konnte ich dann mit
$this->object->doSelect($query); mit der DB arbeiten.

Doch wie muss das nun umgesetzt werden? Wie greife ich nun in meiner Klasse Login auf die Instance der DB Klasse zu? Irgendwie kapiere ich das nicht ganz.

Ueber einen Tip wuerde ich mich sehr freuen, alle meine Ansaetze verliefen bisher ins Leere. Vielen Dank im Voraus.

Gruss Luka
Luka ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 19.12.2008, 15: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

statt
PHP-Code:
$object=new MySQL ($dbhost,$dbuser,$dbpass,$dbname); 
nun
PHP-Code:
$object=MySQL::singleton (); 
__________________
--
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 19.12.2008, 15:45  
Neuer Benutzer
 
Registriert seit: 22.11.2007
Beiträge: 15
Luka
Standard

Hi,

Danke, aber wie bekomme ich $dbhost,$dbuser,$dbpass,$dbname an die MySQL Klasse weitergereicht?
Luka ist offline  
Alt 19.12.2008, 15:49  
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

Tja, das ist das Problem beim ST. Entweder Du benutzt eine parameterisierte Init Funktion oder Du setzt diese Angaben als feste Parameter in der Klasse. Oder Du läßt das Objekt bei Instanziierung ein Setting einlesen. Aber so oder so wäre es ja nicht sinnvoll, die Datenbankdaten überall in jeder Methode mit zusetzen, die eine nDB Verbindung herstellt/referenziert. Von daher am besten: Datenbank am Anfang des Scripts instanziieren und anschließend per Init-/oder Connection-Funktion die Verbindung aufbauen.
__________________
--
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 19.12.2008, 15:57  
Erfahrener Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 176
BlackWolf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du könntest die Parameter auch einfach statisch machen. Also du definierst in deiner Klasse z.b.
public static $dbhost = NULL;
setzt das dann einmal über
Klasse::$dbhost = 'deinhost';
und das wars. Du musst halt nur sicherstellen das du mindestens einmal setzt.

Ansonsten kannste die Parameter auch einfach hart reincoden. Ich mein wenn du nicht zu mehreren DBs verbindungen aufbauen musst ist das ja egal.

Ach und zum Singleton: Ich gehe davon aus das hast du aber denk daran das du __construct und __clone in einem Singleton als private deklarieren musst!

mfg
BlackWolf ist offline  
Alt 19.12.2008, 15:59  
Neuer Benutzer
 
Registriert seit: 22.11.2007
Beiträge: 15
Luka
Standard

Mmh hast Du fuer den Part "Datenbank am Anfang des Scripts instanziieren und anschließend per Init-/oder Connection-Funktion die Verbindung aufbauen" zufaellig ein Beispiel? irgendwie ist mir nicht 100% klar, was damit gemeint ist.
Luka ist offline  
Alt 19.12.2008, 16:10  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Tja, das ist das Problem beim ST. Entweder Du benutzt eine parameterisierte Init Funktion oder Du setzt diese Angaben als feste Parameter in der Klasse. Oder Du läßt das Objekt bei Instanziierung ein Setting einlesen. Aber so oder so wäre es ja nicht sinnvoll, die Datenbankdaten überall in jeder Methode mit zusetzen, die eine nDB Verbindung herstellt/referenziert. Von daher am besten: Datenbank am Anfang des Scripts instanziieren und anschließend per Init-/oder Connection-Funktion die Verbindung aufbauen.
wir haben doch eine init funktion:

PHP-Code:
    public static function singleton($dbhost,$dbuser,$dbpass,$dbname
    { 
        if (!(
self::$instance instanceof self)) { 
            
self::$instance = new self($dbhost,$dbuser,$dbpass,$dbname); 
        } 

        return 
self::$instance
    } 
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline  
Alt 19.12.2008, 16:20  
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

Finde ich nicht sehr schön. Und - wie gesagt - Muß dann jede Methode die die DB nutzen will die kompletten DB Userdaten kennen. Weil sie ja nicht weiß, ob sie als erste das ST DB-Objekt erzeugt.
__________________
--
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 19.12.2008, 16:26  
Erfahrener Benutzer
 
Registriert seit: 27.09.2008
Beiträge: 316
PHP-Kenntnisse:
Fortgeschritten
moveax1 befindet sich auf einem aufstrebenden Ast
Standard

ich mein bestimmt auch nicht schön, aber wenn man die Übergabeparameter
mit default Werten belegt, werden Sie mit der obigen Programmlogik auch nur einmal ausgelesen / benötigt.
__________________
twitter.com/moveax1 || http://modxcms.com/ || http://ubuntuusers.de/

$live->free() OR die();
moveax1 ist offline  
Alt 19.12.2008, 16:32  
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

Dann kann ich sie aber auch als Objekteigenschaften notieren.
__________________
--
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  
 


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
PHP Command Pattern = Module? meGa Software-Design 4 14.12.2008 12:35
[Erledigt] Formularvalidierung, preg_match pattern Problem moveax1 PHP Tipps 2008 4 12.12.2008 16:48
Singleton vs. Registry nerere Software-Design 19 01.12.2008 20:21
[Erledigt] Singleton Fehler Andreas PHP-Fortgeschrittene 3 17.10.2008 16:27
Design Pattern Harry B. Software-Design 7 02.09.2008 20:49
Gegenstück zu parent:: oder Singleton abstrakt implement. ?? Melchior PHP-Fortgeschrittene 13 26.07.2007 21:25
Bild vor Link pattern TimmaY PHP Tipps 2007 5 21.03.2007 18:06
Verständnisfrage Singleton in PHP ve.ru PHP Tipps 2006 3 13.06.2006 20:36
Decorator pattern: 'protected' und parallele vererbung axo PHP-Fortgeschrittene 5 20.10.2005 15:53
Singleton Klasse - falsche Werte PHP Tipps 2005 20 24.05.2005 12:07
[Erledigt] Design Pattern - MySQL Sitzung in allen Objekten nutzen PHP-Fortgeschrittene 21 28.04.2005 22:18
Folgendes Pattern PHP Tipps 2005 5 01.03.2005 12:41
Probleme mit Pattern bei Templateersetzung RudiS PHP-Fortgeschrittene 2 19.02.2005 22:09
Pattern Syntax Problem mit MulitLine PHP Tipps 2004-2 2 21.12.2004 15:53
preg_match --> pattern PHP Tipps 2004 4 27.08.2004 18:12

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php mysql singleton, php singleton mysql, mysql singleton, singleton mysql, singleton php, php singleton, singleton pattern php, http://www.php.de/php-tipps-2008/49942-singleton-pattern-verstaendisproblem.html, php login singleton, singleton php mysql, was ist ein single pattern in php, singleton mysql php, singleton beispiel php, mysql singleton php, singleton pattern login, php singleton pattern beispiele, mysql singleton klasse php, singleton php msqli beispiel, php singleton login klasse, mysql db php singleton

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:38 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