忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/05/27 03:55 |
AuraPHP 1.0.0 Aura.Signal
Aura.Signalはイベントハンドラです。
特定のイベントに対してアクションを紐付けます。

<?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


2013/05/17 23:59 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<今週の実績 2013/05/19 | HOME | AuraPHP 1.0.0-beta1 Aura.Session>>
忍者ブログ[PR]