2 Stimmen

PHP5: Rückrufe zwischen Klassenobjekten

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X