Phunctional: Binding—함수 인자 고정시키기
Tuesday, January 30th, 2007디토 님의 댓글을 보고 생각나서…….
Phunctional의 Binding을 사용하면 C++의 bindNth나 Python의 functools.partial 같은 효과를 낼 수 있다.
$a = map(bind2nd(new Operator('+'), 2), array(1, 2, 3, 4));
$b = array(2, 4, 6, 8);
assert($a == $b);
bind1st(), bind2nd(), bind3rd() 함수는 축약형으로, 이렇게 작성되어 있다.
function bind1st($functor, $binding_arg) {
return new Binding($functor, array($binding_arg));
}
function bind2nd($functor, $binding_arg) {
return new Binding($functor, array(1 => $binding_arg));
}
function bind3rd($functor, $binding_arg) {
return new Binding($functor, array(2 => $binding_arg));
}
Binding 클래스를 직접 이용하면 좀 더 유연한 바인딩이 가능하다. 생성자는 첫번째 인자로 함수자(functor)—유사 함수 객체(function-like object)—를 받고, 두번째 인자로 바인딩할 인자의 순서와 값을 연관 배열로 받는다.
$hex2bin = new Binding('base_convert', array(1 => 16, 2 => 2));
# equals: function hex2bin($_) { return base_convert($_, 16, 2); }
덧. Phunctional 안에서 함수자는 호출 가능한 함수명 문자열이거나 Callable 인터페이스를 구현한 클래스의 인스턴스들을 말한다.

