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?