Einzelnen Beitrag anzeigen
Alt 13.05.2007, 23:12  
dr.e.
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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 nieselfriem,

Zitat:
das heist also. ich muß meine db-Klasse mit require einbinden und wenn ich sie in der entprechenden php-datei verwenden möchte bzw. in einer klasse muß ich immer ein neues objekt erzeugen.
Du musst überall dort, wo du eine Instanz benötigst diese verfügbar machen. Da wir hier im Anfänger-Forum sind wollte ich nichts von Singleton erzählen, aber du fragst ja explizit...
Du hast in der Datei, in der sich deine MySQL-Klasse befindet diese am Ende instanziiert um eine Instanz dieser Klasse verfügbar zu haben. Wenn du das so löst, bist du gezwungen die Instanz entweder am Verwendungsort neu zu erstellen (new mysql_db()) oder die bereits vorhandene Instanz mit

PHP-Code:
<?php
   
[..]
   global 
$db;
   [..]
?>
in der gewünschten Methode verfügbar zu machen. Letzteres ist - wie beschrieben - unschön. Aus diesem Grund verwendet man hier das Singleton-Pattern, das die Möglichkeit bietet, überall, wo benötigt, eine Instanz eines Objekts verfügbar zu machen. Damit wird sichergestellt, dass es nur genau eine Instanz des angegebenen Objekts gibt, dieses aber überall verfügbar ist. In Quelltext gegossen sieht das dann so aus:

PHP-Code:
<?php
[..]
        function 
checkdatas()
        {
             [..]
             
$db = &Singleton::getInstance('mysql_db');

             
$ok=true;
             
$fehlerfeld=array();
             
$db->query("SELECT count(*) from Kunde where email=$this->cmail");
             list(
$anzahl)=$db->data();
            
             [..]
?>
Als Singleton-Implementierung kannst du beispielsweise die aus dem CHM-File nehmen. Du kannst dir diese aber auch selbst implementieren. Zum Download gibt es meine unter http://christian.zierpflanzenberatun...mo_package.zip im Ordner apps/core/singleton/. Diese einfach per require() einbinden und gemäß der API-Dokumentation nutzen.


Zitat:
Das das objekt in der db-Klasse erzeugt wird habe ich aus einem buch. Dies macht man so also nicht!
Diesen Satz verstehe ich nicht...
__________________
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