1. Go to this page and download the library: Download linusshops/pipeline library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
(new Pipeline())
->send($file)
->through([
$validator,
$processor,
$archiver,
$notifier
])
->thenReturn();
class Validate
{
public function handle(File $file, Closure $next)
{
// ... business logic ...
return $next($file);
}
}
class Process
{
public function handle(File $file, Closure $next)
{
// ... business logic ...
return $next($file);
}
}
class Archive
{
public function handle(File $file, Closure $next)
{
// ... business logic ...
return $next($file);
}
}
class Notify
{
public function handle(File $file, Closure $next)
{
// ... business logic ...
return $next($file);
}
}
$pipes = [
new Validate(),
new Process(),
new Archive(),
new Notify()
];
(new Pipeline())
->send(new File()) // Start with a file
->through($pipes) // validate, process, archive, notify
->thenReturn();
$pipes = [
// Multiply by 10
function ($input, $next) {
// Modify the input
$input = $input * 10;
// Run the next pipe with the modified input
return $next($input);
},
// Divide by 5
function ($input, $next) {
// Modify the input
$input = $input / 5;
// Run the next pipe with the modified input
return $next($input);
},
// Add 1
function ($input, $next) {
// Modify the input
$input = $input + 1;
// Run the next pipe with the modified input
return $next($input);
},
];
$output = (new Pipeline())
->send(10) // Start with 10
->through($pipes) // Multiply by 10, divide by 5, add 1
->thenReturn();
// Output: 21
$pipes = [
fn($input, $next) => $next($input . 'A'),
function ($input, $next) {
// Abort further processing by returning the current $input.
// The important part is that we don't call `$next($input)`.
// We can return anything, false, null, $input etc. as long as it doesn't
// Run the next pipe with the modified input.
if ($input === 'A') {
return $input;
}
// The remainder of this, as well as the next pipe,
// will not execute.
$input .= 'B';
return $next($input);
},
fn($input, $next) => $next($input . 'C'),
];
$output = (new Pipeline())
->send('') // Start with an empty string
->through($pipes) // Append A. Immediately stop further processing and return A.
->thenReturn();
// Output: A
$pipes = [
function ($input, $next) {
// Immediately run the next pipes and get their results.
$result = $next($input);
$result .= 'A';
return $result;
},
fn($input, $next) => $next($input . 'B'),
fn($input, $next) => $next($input . 'C'),
];
$output = (new Pipeline())
->send('') // Start with an empty string
->through($pipes) // The first pipe immediately calls the next pipe, so we move on to B, then C, then finally A is run at the end.
->thenReturn();
// Output: BCA
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.