インスタンス生成を流れるようなインターフェイスで
題名まま。
参考記事:Martin Fowler's Bliki in Japanese - 流れるようなインタフェース
サンプル
var s:Sprite = Sprite( new ObjectBinder( new Sprite) .property( 'x', 10) .property( 'y', 40) .property( 'visible', [false]) .targetInstance );
使える、のか?
ソース
package { public class ObjectBinder { public var targetInstance:*; public function ObjectBinder( targetInstance:*) { this.targetInstance = targetInstance; } public function property( key:String, value:*):ObjectBinder { targetInstance[ key] = value; return this; } public function method( methodName:String, args:Array = null):ObjectBinder { targetInstance[ methodName].apply( args, targetInstance); return this; } } }
PHP版
<?php $japan =& ObjectBinder::create( new Aisatsu()) ->property( 'mornig', 'おはよう') ->property( 'afternoon', 'こんにちは') ->property( 'evening', 'こんばんは') ->method( 'setDecoration', array( '!')) ->target; class Aisatsu { public $mornig; public $afternoon; public $evening; private $decoration; public function setDecoration( $str) { $this->decoration = $str; } } class ObjectBinder { public $target; private function __construct() {} public static function &create( &$target) { $o = new ObjectBinder(); $o->target =& $target; return $o; } public function &property( $key, $value) { if( !property_exists( $this->target, $key)) throw new Exception( "オブジェクトにプロパティ{$key}はありません。"); $this->target->$key =& $value; return $this; } public function &method( $name , &$args = null) { if( !method_exists( $this->target, $name)) throw new Exception( "オブジェクトにメソッド{$name}はありません。"); if( $args == null) call_user_func( array( $this->target, $name)); else call_user_func_array( array( $this->target, $name), $args); return $this; } }