PHP-Einfach.de
  • PHP Tutorial
  • MySQL Tutorial
  • Für Fortgeschrittene
  • Webhosting
  • Jobs
  • Forum

Codeschnipsel

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
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
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 😀
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

Autor B.C.

Zurück zur Übersicht
Autor: Nils Reimers
Zurück: URLs im Text identifizieren

Für Fortgeschrittene

  • Objektorientierte Programmierung
  • PHP Sicherheit
  • Script-Beispiele
  • Codeschnipsel
  • Stellenmarkt
Mit freundlicher Unterstützung von:
  • Punkt191 Werbeagentur
  • Casinopilot24.com
  • Casino utan Spelpaus
  • Casino utan Spelpaus med Trustly
  • Neueonline-Casinos.com
  • CasinoHEX.at
  • Decasinos.de
  • Privatkredit247.com
  • CasinoAdvisers.com
  • parhaatuudetkasinot.com
  • Online Casino Spielautomaten

Hoster – Geringste Ausfallzeit

  1. webgo Ø 1 Min.
  2. netcup Ø 5 Min.
  3. Linevast Ø 7 Min.
  4. Mittwald Ø 13 Min.
  5. manitu Ø 14 Min.
  6. dogado Ø 14 Min.
  7. All-Inkl.com Ø 20 Min.
  8. Host Europe Ø 21 Min.
  9. bplaced Ø 22 Min.
  10. Strato Ø 26 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2021

Um dich beim Lernen von PHP und MySQL zu unterstützen verwenden wir Cookies. OK Weitere Infos
Privacy & Cookies Policy

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Notwendige
immer aktiv

Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.

Nicht notwendige

Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.