рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд░реА рдФрд░ рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕
рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдБ PHP рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:
github.com/Elfet/FunctionalрдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
use Functional\Partial; function foo($a, $b, $c) { return "foo<$a, $b, $c>\n"; } $p = Partial::apply('foo', 1, 2); echo $p(3);
рдЖрдк рдирд╛рдорд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$p = Partial::applyNamed('foo', array('a' => 1, 'c' => 3)); echo $p(2);
рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$p = Partial::apply(function ($a, $b, $c = 'c') { return "function()<$a-$b-$c>\n"; }, 1); echo $p(2);
рдпрд╛ рдмрд╛рдж рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВ:
class Boo { public function woo($a, $b, $c) { return "Boo::woo<$a, $b, $c>\n"; } } $p = Partial::apply(array($boo, 'woo')); $p->applyArgs(1, 2); $p->applyNamedArgs(array('b' => 3)); echo $p();
рдХрд░реА рдЙрджрд╛рд╣рд░рдг:
use Functional\Curry; function foo($a, $b, $c) { return "foo<$a, $b, $c>\n"; } $c = new Curry('foo'); echo $c->invoke(1)->invoke(2)->invoke(3);
рдпрд╛ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
echo $c[1][2][3];