PHP 8.6 SortDirection : des API de tri plus claires et plus sûres pour PHP

· Oskar Stark · Expertise · Temps de lecture: 3 minutes
Modern abstract editorial scene with cleaner, safer sorting API concepts and subtle purple accents

PHP 8.6 introduit `SortDirection`, une évolution utile qui rend les API de tri plus claires. Voici ce que cela change, pourquoi c'est important et comment l'utiliser en pratique.

PHP a toujours proposé plusieurs façons de trier des tableaux et des structures de données, mais toutes les API ne sont pas aussi expressives. Avec PHP 8.6, le nouvel enum SortDirection améliore la lisibilité et la sécurité du type lorsque vous devez indiquer un ordre croissant ou décroissant.

Il s’agit d’un petit ajout au langage, mais il s’inscrit dans une tendance plus large du PHP moderne : passer de flags faiblement typés et d’entiers "magiques" à des API explicites et auto-documentées.

Pourquoi SortDirection est important

Traditionnellement, les fonctions de tri de PHP utilisent des flags comme SORT_ASC et SORT_DESC, ou des callbacks de comparaison personnalisés. Même si elles sont familières, ces constantes ne sont en réalité que des entiers, ce qui rend le code moins explicite qu’il ne pourrait l’être.

SortDirection permet aux développeurs d’exprimer leur intention de manière plus claire :

  • SortDirection::Ascending

  • SortDirection::Descending

Le code devient ainsi plus facile à lire, plus simple à refactorer et moins vulnérable aux erreurs d’utilisation accidentelles.

Un aperçu rapide du nouvel enum

Dans PHP 8.6, vous pouvez travailler directement avec l’enum au lieu de passer des flags entiers bruts là où l’API le prend en charge.

Exemple : comment utiliser SortDirection dans votre code

use SortDirection;

function sortUsers(array $users, SortDirection $direction): array
{
    usort($users, function (array $a, array $b) use ($direction): int {
        $comparison = $a['name'] <=> $b['name'];

        return match ($direction) {
            SortDirection::Ascending => $comparison,
            SortDirection::Descending => -$comparison,
        };
    });

    return $users;
}

$users = [
    ['name' => 'Zoe'],
    ['name' => 'Anna'],
    ['name' => 'Mike'],
];

print_r(sortUsers($users, SortDirection::Ascending));
print_r(sortUsers($users, SortDirection::Descending));

Cet exemple illustre l’un des principaux avantages du nouvel enum : la direction fait partie du système de types et n’est pas seulement une convention.

Comparaison avec les approches antérieures

Avant SortDirection, votre code aurait ressemblé à celui-ci :

function sortUsers(array $users, int $direction): array
{
    usort($users, function (array $a, array $b) use ($direction): int {
        $comparison = $a['name'] <=> $b['name'];

        if ($direction === SORT_DESC) {
            return -$comparison;
        }

        return $comparison;
    });

    return $users;
}

Cela fonctionne, mais présente quelques inconvénients :

  • int $direction ne transmet pas le sens aussi bien qu’un enum

  • n’importe quel entier peut être passé par erreur

  • l’API oblige à retenir quelle constante correspond à quel comportement

Avec SortDirection, le compilateur et l’exécution peuvent vous aider à exprimer l’intention plus clairement.

Cas d’usage concrets

Vous bénéficierez le plus de SortDirection pour du code qui expose le tri comme fonctionnalité configurable, par exemple :

  • des tableaux de bord d’administration avec ordre de tri sélectionnable par l’utilisateur

  • des endpoints d’API avec sort=asc|desc

  • des helpers de collections réutilisables

  • une logique de tri dans des services métier

Exemple : convertir une entrée de requête en SortDirection

use SortDirection;

function directionFromString(string $value): SortDirection
{
    return strtolower($value) === 'desc'
        ? SortDirection::Descending
        : SortDirection::Ascending;
}

$direction = directionFromString($_GET['direction'] ?? 'asc');

Cela permet de maintenir la frontière entre l’entrée utilisateur et la logique interne de manière explicite. Analysez les chaînes une seule fois, puis travaillez avec un enum fortement typé dans le reste de l’application.

Une meilleure adéquation avec les codebases PHP modernes

L’introduction de SortDirection peut sembler anodine, mais elle s'inscrit dans l’évolution du PHP dans les versions récentes :

  • plus d’enums

  • plus de types explicites

  • moins de constantes ambiguës

  • un modèle de domaine plus clair

Pour les équipes qui maintiennent de grandes applications Symfony ou PHP, ces changements réduisent la charge de travail. Une petite amélioration de la clarté de l’API peut faire gagner du temps chaque fois qu’un futur développeur revient sur le code.

Ce que cela signifie pour Symfony et le développement d’applications

Même si votre framework n’expose pas encore directement SortDirection, vous pouvez adopter ce pattern dans votre propre application.

Par exemple, lors de la création d’un contrôleur ou d’un service Symfony qui gère le tri, vous pouvez :

  1. accepter une chaîne provenant de la requête

  2. la valider et la normaliser

  3. la convertir en SortDirection

  4. utiliser l’enum dans votre couche domaine ou service

Cette séparation aide à garder des contrôleurs légers et une logique métier lisible.

use SortDirection;

final class UserSorter
{
    public function sort(array $users, SortDirection $direction): array
    {
        usort($users, function (array $a, array $b) use ($direction): int {
            $result = $a['createdAt'] <=> $b['createdAt'];

            return $direction === SortDirection::Ascending ? $result : -$result;
        });

        return $users;
    }
}

Ce type de code est facile à tester et simple à faire évoluer.

Les points à garder à l’esprit

Quelques notes pratiques quand vous adoptez le nouvel enum :

  • vérifiez votre version minimale de PHP avant de l’utiliser

  • conservez l’analyse des entrées à la périphérie de l’application

  • privilégiez les enums dans votre code métier, même si l’interface externe utilise encore des chaînes

  • utilisez match ou des branches explicites lorsque la direction influence la logique métier

Conclusion

SortDirection est un petit ajout, mais il reflète un principe important du PHP moderne : rendre l’intention explicite.

Si vous développez des applications maintenables, en particulier dans des codebases basées sur Symfony, adopter ce type d’enums peut rendre vos API plus claires et votre code plus facile à comprendre.

À mesure que PHP continue d’évoluer, ce sont souvent ces améliorations incrémentales qui ont l’impact le plus fort au quotidien pour les équipes de développement.

Vous souhaitez approfondir vos connaissances ?

SensioLabs propose des formations personnalisables pour vous aider, vous et votre équipe, à maîtriser les nouvelles fonctionnalités de PHP 8.6, telles que l’extension URI, ainsi que d'autres bonnes pratiques modernes de PHP.

Cela pourrait aussi vous intéresser

Black green and golden computer RAM on a dark ground
Clément Bertillon

Donnez une mémoire durable à vos agents IA : le pattern LLM Wiki appliqué dans Symfony

Chaque développeur travaillant quotidiennement avec des assistants comme Claude Code, Codex ou Antigravity connaît cette frustration : ouvrir un prompt sur un projet et devoir, une fois de plus, tout réexpliquer. L'agent ignore vos préférences d'architecture Symfony, vos standards PHP, la façon dont vous structurez vos DTOs, vos règles de nommage Doctrine ou les choix techniques validés sur un autre dépôt la semaine passée. Vous passez alors plus de temps à rédiger des préambules dans vos prompts qu'à concevoir du code à valeur ajoutée.

En savoir plus : Donnez une mémoire durable à vos agents IA : le pattern LLM Wiki appliqué dans Symfony
Fall leaf hanging on a tree branch
Jules Daunay

L’agenda SensioLabs de la fin d’année 2026 : où nous croiser cet automne ?

L’été touche à sa fin, mais la saison des conférences PHP et Symfony ne fait que commencer ! Entre conférences internationales, événements partenaires, meetups locaux et initiatives pour l'accessibilité, l'équipe de SensioLabs, créateur de Symfony, va parcourir la France et l'Europe d'ici la fin de l'année 🍂

En savoir plus : L’agenda SensioLabs de la fin d’année 2026 : où nous croiser cet automne ?
Modern editorial illustration of TYPO3 DevDays excitement with abstract purple-accented conference and community elements
Stiven Llupa

Un moment génial : retour sur les TYPO3 DevDays

Un mauvais détour à travers une forêt, un champ de maïs, puis une conférence tech. Aux TYPO3 Developer Days, j'ai découvert à quel point les communautés TYPO3 et Symfony sont liées, par la technologie, les défis et un principe essentiel : construire pour les utilisateurs.

En savoir plus : Un moment génial : retour sur les TYPO3 DevDays
Abstract editorial concept of a Duration class, showing elapsed time and precise time intervals in modern PHP coding
Oskar Stark

PHP 8.6 Duration : une petite classe pour corriger une erreur récurrente

PHP 8.6 ajoute une classe Duration dédiée. En apparence, cette nouveauté peut sembler mineure, mais elle permettra enfin d'avoir un type de données clair pour le temps écoulé, plutôt que de surcharger la classe DateInterval, les entiers et l’arithmétique sur les timestamps.

En savoir plus : PHP 8.6 Duration : une petite classe pour corriger une erreur récurrente
Abstract editorial illustration of PHP 8.6 JSON parsing with a highlighted error position and subtle purple accents
Oskar Stark

PHP 8.6 : Trouver la position d’une erreur JSON lors du décodage

PHP 8.6 apporte une amélioration mineure mais pratique pour le décodage JSON : il est désormais possible d'obtenir la position exacte de l'erreur en cas d'échec. Le débogage des payloads incorrects est ainsi grandement facilité.

En savoir plus : PHP 8.6 : Trouver la position d’une erreur JSON lors du décodage
Large tree under the sunlight
Mathieu Santostefano

Multipliez votre vitesse de développement avec l’IA grâce aux Git Worktrees

Fini le jonglage fastidieux entre git stash et les réinstallations de dépendances. Découvrez comment les Git Worktrees révolutionnent votre expérience développeur en permettant à vos agents IA de travailler sur une branche isolée pendant que vous restez concentré sur votre code. Une méthode indispensable pour mener vos tâches en parallèle et multiplier votre vitesse d'exécution sans friction.

En savoir plus : Multipliez votre vitesse de développement avec l’IA grâce aux Git Worktrees
A man sculpting a rock with PDF written on it
Steven Renaux

Créer un Custom Builder - L'histoire du GotenbergBundle

Nous avons déjà vu comment générer un fichier PDF en quelques lignes de code à l'aide de Gotenberg et de GotenbergBundle, un bundle Symfony. Mais que faire lorsque votre application doit générer plusieurs fichiers PDF différents, chacun avec sa propre mise en page, ses propres styles et ses propres données ?

En savoir plus : Créer un Custom Builder - L'histoire du GotenbergBundle
Nicolas Grekas standing on stage at SymfonyLive Paris 2026
Jules Daunay

SymfonyLive Paris 2026 : IA et retrouvailles au sommet pour la Team SensioLabs

Le rideau vient de tomber sur le SymfonyLive Paris 2026, et on a encore des étoiles ✨ (et des lignes de code) plein les yeux. En tant que créateur de Symfony et sponsor historique, SensioLabs ne pouvait rêver d'un meilleur moment pour célébrer l'open source, l'innovation et, surtout, l'incroyable communauté qui nous entoure.

En savoir plus : SymfonyLive Paris 2026 : IA et retrouvailles au sommet pour la Team SensioLabs