16 May 2012

Карринг и Частичное применение функции в PHP

PHP
Что такой карринг и частичное применение функции можно прочитать вот в этой статье.

Собственно вот реализация на 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); // foo<1, 2, 3>


Так же можно использовать именованные параметры:

$p = Partial::applyNamed('foo', array('a' => 1, 'c' => 3));

echo $p(2); // foo<1, 2, 3>


Можно задавать значения по умолчанию:

$p = Partial::apply(function ($a, $b, $c = 'c') {
    return "function()<$a-$b-$c>\n";
}, 1);

echo $p(2); // function()<1-2-c>


Или добавить параметры позже:

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(); // Boo::woo<1, 3, 2>


Пример карринга:

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); // foo<1, 2, 3>


Или использовать сокращённый синтаксис:

echo $c[1][2][3]; // foo<1, 2, 3>
Tags:phpcurrypartial apply
Hubs: PHP
+14
1.4k 71
Comments 37
Popular right now
PHP developer
to 250,000 ₽РНКБ Банк (ПАО)МоскваRemote job
PHP-разработчик
from 40,000 to 60,000 ₽Dota2.ruRemote job
PHP разработчик
to 110,000 ₽Sportmaster LabМоскваRemote job
PHP-программист
from 50,000 to 100,000 ₽СупердоставкаRemote job
PHP-разработчик
from 50,000 to 120,000 ₽GarpixИвановоRemote job