PSRs

KISS PSR classes

Si vous ne connaissez pas PHP-FIG, commencez par là.
En bref : ensemble d'interfaces standardisée pour permettre une interopérabilité entre projets, librairies, frameworks, ...

Ca fait un bail que je voulais faire une lib un peu générique mais simple (KISS) qui permettrait de couvrir des besoins essentiels et basiques pour des petits projets (perso ou non).

Besoin

Depuis que les PSR Http (7, 15, 17, 18) existent, la contrainte pour mes projets perso de dépendre de lib externes comme symfony/http-foundation me pesait.

J'aime l'indépendance et le KISS. Certaines de ces lib proches du feature-complete véhiculent justement beaucoup de code qui sert très marginalement.

En tout cas, pour mes projets perso, je voulais réduire ces dépendances.

PSR-7 + PSR-17

On ne va pas se cacher, mais réinventer la roue, si ce n'est pas pour la simplifier, ne sert à rien. Du coup pour ces PSR, j'utilise en composition la lib nyholm/psr7 qui est déjà tellement simple et efficace que je ne vois pas ce que j'apporterais de plus à la recoder.

PSR-18

Ce cas est plus compliqué car les clients http sont peu nombreux. Ici aussi, recoder un client http complet n'a aucun intérêt, j'ai choisi d'utiliser en composition symfony/http-client.

PSR-14

Mon implémentation la plus KISS selon moi c'est cette PSR. J'ai codé une espèce de bus d'objet basé sur le type hinting et l'héritage de classes/interfaces.

Les applications d'un tel type de bus d'objet sont pléthore :

Exemple :

$dispatcher = new \Arnapou\Psr\Psr14EventDispatcher\ClassEventDispatcher();

$dispatcher->listen(function(DateTime $date) {
    echo "DateTime: " . $date->format('Y-m-d') . "\n";
});

$dispatcher->listen(function(DateTimeImmutable $date) {
    echo "DateTimeImmutable: " . $date->format('Y-m-d') . "\n";
});

$dispatcher->listen(function(DateTimeInterface $date) {
    echo "DateTimeInterface: " . $date->format('Y-m-d') . "\n";
});

$dispatcher->dispatch(new DateTime('2023-10-10'));
// This will echo
// DateTime: 2023-10-10
// DateTimeInterface: 2023-10-10

PSR-*

Pour toutes les autres PSR, j'ai des implémentations assez classiques.

Détails

Pour plus de détails techniques, allez voir le README sur Gitlab.

Liens