La programmation fonctionnelle n'a plus vraiment le vent en poupe mais je pense qu'elle peut être intéressante car plus facile à comprendre que la programmation orientée objet et j'espère donc trouvé du temps pour concrétiser tout ça. J'ai même pensé mettre à jour KrISS feed en utilisant ce principe, un jour peut-être...
Voici donc une première présentation de middleware qui correspond au principe de la couche d'oignon illustré dans cet article : http://esbenp.github.io/2015/07/31/implementing-before-after-middleware/ mais en programmation fonctionnelle :
<?php include('src/helpers/middleware/middleware.php');
function before($object, $next) {
$object[] = 'before';
return $next($object);
}
function after($object, $next) {
$object = $next($object);
$object[] = 'after';
return $object;
}
function core($object) {
$object[] = 'core';
return $object;
}
$middleware = middleware(['after', 'before', 'after', 'before'], 'core');
var_dump($middleware());
?>
Le résultat est le suivant
array(5) {
[0] =>
string(6) "before"
[1] =>
string(6) "before"
[2] =>
string(4) "core"
[3] =>
string(5) "after"
[4] =>
string(5) "after"
}
J'imagine utilisé ce principe de middleware pour gérer des plugins dans KrISS aaaa. Plus d'exemples dans le fichier de tests : https://github.com/KrISS/aaaa/blob/main/tests/MiddlewareTest.php