Skip to content

darkwood-com/flow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

c8b0670 · Dec 24, 2024
Apr 13, 2024
Dec 20, 2024
Nov 17, 2024
Nov 17, 2024
Oct 27, 2024
Nov 17, 2024
Aug 30, 2024
Oct 17, 2024
Dec 20, 2024
Sep 6, 2023
Aug 7, 2024
Oct 17, 2024
Aug 7, 2024
Oct 27, 2024
Sep 6, 2023
Aug 15, 2024

Repository files navigation

Flow

Why ?

Flow concept aims to solve

  • Adopt asynchronous as native implementation
  • Build your code with functional programming
  • Assemble your code visually

Installation

PHP 8.3 is the minimal version to use Flow The recommended way to install it through Composer and execute

composer require darkwood/flow

Usage

<?php

use Flow\Flow\Flow;
use Flow\FlowFactory;
use Flow\Ip;

class D1 {
    public function __construct(public int $n1) {}
}

class D2 {
    public function __construct(public int $n2) {}
}

class D3 {
    public function __construct(public int $n3) {}
}

class D4 {
    public function __construct(public int $n4) {}
}

$flow = (new FlowFactory())->create(static function() {
    yield fn (D1 $data1) => new D2($data1->n1 += 1);
    yield fn (D2 $data2) => new D3($data2->n2 * 2);
    yield function(D3 $data3) {
        printf("my number %d\n", $ip->data->n3)); // display 'my number 10'

        return new D4($data3->n3);
    };
});

$ip = new Ip(new D1(4));
$flow($ip);
$flow->await();

Examples

A working script is available in the bundled examples directory

  • Run Flow : php examples/flow.php
  • Run Y-Combinator Flow : php examples/yflow.php
  • Start Server : php examples/server.php
    Start Client(s) : php examples/client.php

Documentation

https://darkwood-com.github.io/flow

License

Flow is released under the MIT License.