Hallo,
$foo = new Foo;
print $foo->XR->xr("Heute ist %tag\n", array('tag' => date('D'))); # Heute ist Tue
Nope, das ist kein (gutes) Beispiel für ein delegate. Ich probier mal mein Glück, vielleicht hilft es jemandem
~~~php
<?php
/* Printer interface and implementations */
interface iPrinter {
public function print();
public function getInfo();
}
class NormalPrinter implements iPrinter {
private $printer;
function __construct() {
$this->printer = printer_open("HP Deskjet 930c");
}
function __destruct() {
printer_close($this->printer);
}
public function print($content) {
printer_write($this->printer, $content);
}
public function info() {
return "HP Deskjet 930c";
}
}
class VirtualPrinter implements iPrinter {
public function print($content) {
echo $content;
}
public function info() {
return "A stdout printer";
}
}
/* */
class Calculator {
public $printerDelegate;
function sum($a, $b) {
$this->print("{$a} + {$b} = {$a + $b}");
}
function difference($a, $b) {
$this->print("{$a} - {$b} = {$a - $b}");
}
private function print($content) {
if ($this->printerDelegate) {
$this->printerDelegate->print($content . "\n");
}
}
}
// Testausführung
$printer = new NormalPrinter();
$calculator = new Calculator();
$calculator->printerDelegate = $printer; // Wir setzen den normalen Drucker als delegate ein
$calculator->sum(2, 5); // Druckt 7 auf dem HP Deskjet aus
$calculator->difference(10, 4); // Druckt 6 auf dem HP Deskjet aus
$virtualPrinter = new VirtualPrinter();
$calculator->printerDelegate = $virtualPrinter; // Wir ändern den Delegate zu einem virtuellen Drucker
$calculator->sum(2, 5); // Der gleiche Aufruf wie oben gibt 7 auf stdout aus
$calculator->difference(10, 4); // Der gleiche Aufruf wie oben gibt 6 auf stdout aus
Jeena