PHP-Einfach.de PHP lernen leicht gemacht

Navigation
» Startseite
» Newsübersicht
» Kontakt
» Impressum

Community
» Forum
» Gästebuch

Tutorial
» PHP Tutorial
» MySQL Tutorial
» PHP
» MySQL
» Codeschnipsel

Downloads
» Einführung
» Scripts
» Command Board

Sonstiges
» md5-Generator
» Generator
» Wissenswertes

PHP lernen


Dieses Projekt wird unterstützt von
Lichteffekte Shop

 
Partner:
PHP Forum
Mathe Nachhilfe
Suchmaschinenoptimierung

Design Patterns in PHP5

Zurück zur Übersicht

Design Patterns bieten elegante Lösung für häufig aufkehrende Probleme in der objektorientierten Programmierung.

Hi,

Ich möchte hier mal einige Design Patterns, auf Deutsch Entwurfsmuster, vorstellen. Dieser Thread
soll auch als Sammelthread für solche Entwurfsmuster sein. Na ja, ich lege mal vor:

Singleton
Oft besteht das Problem, dass man zB bei einer Datenbankklasse ein Konstrukt hat, dass die
Verbindung zur Datenbank herstellt. Aber nun möchte man nicht, dass die Verbindung 2 Mal
ausgeführt wird, sprich, es darf nur einmal ein Objekt dieser Klasse vorhanden sein und es dürfen
auch nicht mehr Objekte erstellt werden.

Hier mal ein Codeschnipsel für Singleton:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
<?php
class Singleton
   
{
      
//Unser Objekt der Klasse Singleton
      
private static $objekt null;

      
//Konstruktor
      
private function __construct ()
         {
            
//Könnte auch ne Datenbankverbindung sein
            
printf('Konstruktor der Klasse %s wurde aufgerufen!',
            
get_class($this) );
         }

      public static function 
getInstance ()
         {
            
//Falls noch nich getan, Referenz
            //der Klasse auf das Objekt übertragen
            
if(is_null(self::$objekt))
               
self::$objekt = new Singleton;

            
//Objekt zurückgeben
            
return self::$objekt;
         }
   } 
//Ende: Singleton

//Anwendung:

//Gibt die Instanz der Klasse zurück
//und führt den Konstruktor aus
$Objekt Singleton::getInstance();

//Noch eine Instanz
//Diesmal wird der Konstruktor nicht ausgeführt,
//man erhält genau das gleiche Objekt wie $Objekt
$Objekt2 Singleton::getInstance();
?>



Fabrik
Eine Fabrik baut Objekte zur Laufzeit zusammen. Das ist ganz praktisch, wenn man zur Laufzeit
des Skriptes noch nicht genau weiß, ob überhaupt und welches Objekt benötigt wird. Welche Klasse
benötigt wird, kann zB erst über Get-Parameter deutlich werden, daher wäre es sinnlos, alle 100
Klassen zu includen, obwohl nur eine benötigt wird.

Codeschnipsel für eine Factory
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
<?php
class Factory
   
{
      
/**
      * Konstante, Pfad zu den Klassen
      */
      
const DIR '/Pfad/zu/den/Klassen/';

      
/**
      * Baut das Objekt zusammen, mit Fehlerbehandlung
      * und Paketmöglichkeiten
      *
      * @param  string  $class - Name der Klasse
      * @param  mixed   $param - Parameter der Klasse
      * @return  objekt - Instanz der Klasse
      */
      
public static function getClass ($className$param null)
         {
            
//Ist der Klassenname gültig?
            
if(!is_string($className))
               exit (
'Kein g&uuml;ltiger Klassenname: ' $className);

            
//Existiert die Klasse schon?
            
if(!class_exists($className))
               exit(
'Die Klasse existiert schon: ' $className);

            
//Existiert die Datei?
            
$file self::DIR str_replace('::''/'$className) . '.class.php';
            if(!
file_exists($file))
               exit(
'Die Datei existiert nicht: ' $file);

            require_once (
$file);

            try
               {
                  
//Name vom Paket trennen
                  
$tmp explode('::'$className);
                  
$class array_pop($tmp);

                  
//Objekt bauen
                  
$objekt = new $class($param);
               }
            catch(
Exception $e)
               {
                  throw new 
Exception ('Fehler beim Konstruiren des Objektes<br />
                                        Failes to construct the object: \'' 
$className '\'');
               }
         }
   }

//Anwendung:

//Bindet Klasse: /Pfad/zu/den/Klassen/Datenbak/MySQL.class.php ein
//Und erstelt Objekt der Klasse 'MySQL'
$objekt =& Factory::getClass('Datenbank::MySQL');

//Man könnte in der Fabrik noch ein Singleton einbaun,
//also ein Array, das alle erstellten Objekte speichert.
//Und wenn eins erneut erstellt wird, das passende Objelt
//aus dem Array zurückgeben...
?>


Es gibt noch viele weitere Design Patterns, aber jetzt hab ich grad keine Lust mehr :D
Hinzu kommt noch:

Observer Pattern
Fassade Pattern

Es gibt noch viele viele mehr, also schön sammeln ;)
Freue mich über jedes hier reingestelltes Design Pattern :)

Gruß,
Basti

Kommentare

Zurück zur Übersicht

Autor B.C.

News
13.08 - » Spam im Gästebuch
Endlich Schluss mit dem Spam

08.12 - » Clanletter 2.0
Clanletter wurde komplett neu programmiert

01.09 - » Command Board 1.0 - 2.0
Das Command Board 1.0 Beta 2.0 ist erschienen


Mehr

Forum
» Entwickler Forum

» insert nach login

» Tabellenzelle zu groß







© PHP-Einfach.de 2003 - 2012