1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Design pattern "command" für PHP

  • Früchtemüsli
  • 21. Februar 2014 um 22:36
  • Unerledigt
  • Früchtemüsli
    6
    Früchtemüsli
    Mitglied
    Reaktionen
    3
    Punkte
    398
    Beiträge
    63
    • 21. Februar 2014 um 22:36
    • #1

    Hi :)

    Ihr kennt doch sicher alle das "command" design pattern.

    Normalerweise würde ich das in PHP alles objektorientiert machen. Aber ich habe mir jetzt mal den Spaß erlaubt, die Kommandos nicht in Klassen, sondern in Closures zu stecken. Herausgekommen ist folgendes:

    PHP
    <?php
       error_reporting(~0);
    
       class Schaltflaeche
       {
          private $command;
    
    
          /**
           * @param closure $command
           */
          function __construct($command)
          {
             //$this->command = Closure::bind($command, $this, get_class());
             $this->command = $command;
          }
          function click()
          {
             call_user_func($this->command);
          }
       }
    
       class VideoPlayer
       {
          function einschalten()
          {
             echo 'ein';
          }
          function ausschalten()
          {
             echo 'aus';
          }
       }
    
    
       $fEinschaltenCommand = 
          /**
           * @param VideoPlayer $oVideoPlayer
           * @return closure
           */
          function(VideoPlayer $oVideoPlayer)
          {
             return function() use ($oVideoPlayer)
             {
                $oVideoPlayer->einschalten();
             };
          };
    
       $fAusschaltenCommand = 
          /**
           * @param VideoPlayer $oVideoPlayer
           * @return closure
           */
          function(VideoPlayer $oVideoPlayer)
          {
             return function() use ($oVideoPlayer)
             {
                $oVideoPlayer->ausschalten();
             };
          };
    
       $oVideoPlayer = new VideoPlayer();
       $oSchaltflaecheEin = new Schaltflaeche($fEinschaltenCommand($oVideoPlayer));
       $oSchaltflaecheEin->click();
       $oSchaltflaecheAus = new Schaltflaeche($fAusschaltenCommand($oVideoPlayer));
       $oSchaltflaecheAus->click();
    ?>
    Alles anzeigen

    Was ist eure Meinung dazu?

    Einmal editiert, zuletzt von Früchtemüsli (22. Februar 2014 um 09:16)

  • Früchtemüsli
    6
    Früchtemüsli
    Mitglied
    Reaktionen
    3
    Punkte
    398
    Beiträge
    63
    • 21. Februar 2014 um 22:39
    • #2

    Vielleicht noch eine Anmerkung, wie ich auf diese seltsame Idee gekommen bin.

    In der iX-Februar-Ausgabe auf Seite 120 werden design patterns für javascript präsentiert. Beim command design pattern werden dort closures für die Kommandos verwendet. Und das wollte ich einfach mal auf PHP ummünzen.

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung