Ich versuche zu verstehen, wie weit ich mit PHP5's Closures/Callbacks gehen kann, aber ich bin derzeit in einem Glaskasten von "warum nicht diese Arbeit" gefangen.
Im folgenden Beispiel verstehe ich, dass die Verwendung von $this
in einem Rückruf (vor allem, wenn der Bereich ändert) wird nicht funktionieren, es ist nur da, um Ihnen zu zeigen, wie ich hoffe, in der Lage sein, um Rückrufe / Verschlüsse zu verwenden.
class Customer {
public $name = '';
public $callback = NULL;
function __construct($name) {
$this->name = $name;
}
function when_enters($callback) {
$this->callback = $callback;
}
function enter_store() {
if(is_callable($this->callback))
call_user_func($this->callback);
}
}
class Salesman {
public $customer = NULL;
function add_customer(&$customer) {
$this->customer =& $customer;
$this->customer->when_enters(function() {
$this->greet_customer();
});
}
function greet_customer() {
echo "Hello, {$this->customer->name}!";
}
}
$salesman = new Salesman();
$customer = new Customer('John');
$salesman->add_customer(&$customer);
$customer->enter_store();
Ich konnte diese grundlegende Funktion reproduzieren, indem ich Folgendes implementierte Salesman
als statische Klasse und die Callback-Funktion als Salesman::greet_customer
anstelle von $this->greet_customer()
.
Im Grunde, was ich wissen möchte ist ... mit Objektinstanzen, ist diese Art von Funktionalität möglich?