PHP 8.5 introduit l'opérateur pipe `|>`, qui transmet le résultat de l'expression de gauche comme premier argument au callable de droite. L'exemple classique est l'assainissement d'entrées : au lieu d'imbriquer `strtolower(str_replace(..., trim($input)))`, qui se lit dans l'ordre inverse de l'exécution, on écrit la chaîne de gauche à droite.

slug.php
<?php
function makeSlug(string $input): string
{
    return $input
        |> trim(...)
        |> (fn($s) => str_replace(' ', '-', $s))
        |> strtolower(...)
        |> (fn($s) => preg_replace('/[^a-z0-9-]+/', '', $s));
}

L'opérateur exige un callable à droite, pas un appel de fonction immédiat. Pour les fonctions à un argument, on utilise la syntaxe de callable de première classe de PHP 8.1 : `trim(...)` crée une closure, tandis que `trim()` s'exécuterait immédiatement et échouerait. Les opcodes compilés correspondent à ceux des appels imbriqués, il n'y a pas de surcoût à l'exécution.

Les fonctions à plusieurs arguments doivent être enveloppées dans des fonctions fléchées, qui nécessitent impérativement des parenthèses pour éviter les erreurs de syntaxe. L'auteur note que cette verbosité est la critique la plus fréquente ; PHP 8.6 devrait apporter l'application partielle de fonctions pour y remédier.

Les méthodes d'instance ne peuvent pas être pipées directement et nécessitent des fonctions fléchées, tandis que les méthodes statiques fonctionnent avec la syntaxe de callable de première classe. Les fonctions void comme `var_dump` cassent la chaîne en transmettant null à l'étape suivante. La syntaxe n'est pas rétrocompatible avec PHP 8.4 ou antérieur. PhpStorm et VS Code avec Intelephense la prennent déjà en charge.