PHPackages                             igorw/compose - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. igorw/compose

ActiveLibrary

igorw/compose
=============

Function composition.

v1.0.1(13y ago)8424.8k↓100%5[1 issues](https://github.com/igorw/compose/issues)MITPHP

Since Apr 18Pushed 12y ago5 watchersCompare

[ Source](https://github.com/igorw/compose)[ Packagist](https://packagist.org/packages/igorw/compose)[ RSS](/packages/igorw-compose/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (4)Used By (0)

igorw/compose
=============

[](#igorwcompose)

Function composition.

Allows you to stitch functions together to form a pipeline. This can be useful if you have to transform data in many steps and you want to describe those steps on a high level.

compose
-------

[](#compose)

Generally, function composition means taking two functions `f` and `g`, and producing a new function `z`, which applies `f` to the result of `g`.

```
z = compose(f, g)
; z(x) => f(g(x))

```

This library provides a `compose` function that does just this.

```
$z = igorw\compose($f, $g);
var_dump($z($x));

```

It supports an arbitrary number of functions to be composed via varargs.

```
$z = igorw\compose($f, $g, $h, $i);

```

The innermost function (the last one in the list) can take an arbitrary number of arguments, whereas the others may only take a single argument.

```
$z = igorw\compose($f, $g);
$z('a', 'b', 'c');
// => $f($g('a', 'b', 'c'))

```

pipeline
--------

[](#pipeline)

`pipeline` is the same as `compose`, but the arguments are reversed. This is more easy to read in some cases, because you can list the functions in the order they will be called.

It is quite similar to a unix pipe in that regard.

Examples
--------

[](#examples)

```
function transform_data($data) {
    return [
        'name' => $data['firstname'].' '.$data['lastname'],
    ];
}

$transformJson = igorw\pipeline(
    function ($json) { return json_decode($json, true); },
    'transform_data',
    'json_encode'
);

$json =
