__invoke マジック メソッドを使用して「一種の」ファースト クラス関数を作成し、コールバックを実装できるかどうか疑問に思っていました。
PHP 5.3の場合、そのように聞こえます
interface Callback
{
public function __invoke();
}
class MyCallback implements Callback
{
private function sayHello () { echo "Hello"; }
public function __invoke () { $this->sayHello(); }
}
class MySecondCallback implements Callback
{
private function sayThere () { echo "World"; }
public function __invoke () { $this->sayThere(); }
}
class WhatToPrint
{
protected $callbacks = array();
public function register (Callback $callback)
{
$this->callbacks[] = $callback;
return $this;
}
public function saySomething ()
{
foreach ($this->callbacks as $callback) $callback();
}
}
$first_callback = new MyCallback;
$second_callback = new MySecondCallback;
$wrapper = new WhatToPrint;
$wrapper->register($first_callback)->register($second_callback)->saySomething();
HelloWorld を出力します
それが役立つことを願っています;)
しかし、そのような機能には、SPL を使用したコントローラー パターンを使用したいと思います。