Aura.Signalはイベントハンドラです。
特定のイベントに対してアクションを紐付けます。
JavaScriptであれば
document.getElementById('hoge').addEventListener('click', handler, false);
のように、内部を一切触らず外部からハンドラを設定することができるわけですが、PHPでは『Test::hoge()が呼ばれたらハンドラを実行する』的な動作を外部から指定することができません。
いちいち内部からハンドラ呼び出しを書かないといけないということで相当微妙。
便利なところとしては、同じシグナル名のハンドラを複数登録しておくと、一回のハンドラ呼び出しで全部実行されます。
また、シグナルが存在しないと何もしません。
普通のメソッド呼び出しだと対象メソッドを書き換えないといけなくなりますが、Aura.Signalはどこからでも好きにコールバックを仕込むことができ、挙動の変更が簡単になります。
まあ、やりすぎるとソース追うのが面倒になりすぎるから程々にしておいてほしいものですが。
AuraPHPの記事
特定のイベントに対してアクションを紐付けます。
<?php
require_once('path/to/channel/vendor/autoload.php');
// 適当なクラス
class Test{
protected $signal;
public function __construct(Aura\Signal\Manager $signal){
$this->signal = $signal;
}
public function hoge(){
// ハンドラ呼び出し
$this->signal->send($this, 'signal1', 'foo');
}
public function fuga(){
// ハンドラ呼び出し
$this->signal->send($this, 'signal2', 'bar');
}
}
// Aura.Signal
$signal = new Aura\Signal\Manager(
new Aura\Signal\HandlerFactory
,new Aura\Signal\ResultFactory
,new Aura\Signal\ResultCollection
);
// ハンドラを登録 (クラス名, シグナル名, コールバック関数, 優先度)
$signal->handler('Test', 'signal1', function($arg){ print($arg); }, 100 );
$signal->handler('Test', 'signal2', function($arg){ print($arg); }, 100 );
$signal->handler('Test', 'signal2', function($arg){ print('ハンドラ複数設定'); }, 200 );
// 実行
$test = new Test($signal);
$test->hoge(); // 'foo'が表示
$test->fuga(); // 'bar''ハンドラ複数設定'の順に表示
なんかこれ、普通にメソッド呼び出してるだけじゃね?JavaScriptであれば
document.getElementById('hoge').addEventListener('click', handler, false);
のように、内部を一切触らず外部からハンドラを設定することができるわけですが、PHPでは『Test::hoge()が呼ばれたらハンドラを実行する』的な動作を外部から指定することができません。
いちいち内部からハンドラ呼び出しを書かないといけないということで相当微妙。
便利なところとしては、同じシグナル名のハンドラを複数登録しておくと、一回のハンドラ呼び出しで全部実行されます。
また、シグナルが存在しないと何もしません。
普通のメソッド呼び出しだと対象メソッドを書き換えないといけなくなりますが、Aura.Signalはどこからでも好きにコールバックを仕込むことができ、挙動の変更が簡単になります。
まあ、やりすぎるとソース追うのが面倒になりすぎるから程々にしておいてほしいものですが。
AuraPHPの記事
PR