Récupérer le nom court d'une classe PHP

Publié le 05/02/2022 • Mis à jour le 05/02/2022


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Dans ce bout de code, nous voyons comment récupérer le nom court d'une classe PHP. Veuillez noter que même si la première solution utilise la réflexion, elle est très rapide et devrait être plus rapide que l'utilisation du composant String de Symfony, que je trouve néanmoins plus élégante.


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

use function Symfony\Component\String\u;

/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 */
trait Snippet189Trait
{
    public function snippet189(): void
    {
        $article = new \App\Entity\Article();

        echo (new \ReflectionClass($article))->getShortName().PHP_EOL;

        echo u(\get_class($article))->afterLast('\\')->toString();

        // That's it! 😁
    }
}

 Exécuter le snippet  ≪ this.showUnitTest ? this.trans.hide_unit_test : this.trans.show_unit_test ≫  Plus sur Stackoverflow   Lire la doc  Snippet aléatoire

<?php

declare(strict_types=1);

namespace App\Tests\Integration\Controller\Snippets;

use PHPUnit\Framework\TestCase;

use function Symfony\Component\String\u;

/**
 * @see Snippet189Trait
 */
final class Snippet189Test extends TestCase
{
    /**
     * @see Snippet189Trait::snippet189
     */
    public function testSnippet189(): void
    {
        $article = new \App\Entity\Article();
        $withRefection = (new \ReflectionClass($article))->getShortName();
        $withSymfony = u(\get_class($article))->afterLast('\\')->toString();

        self::assertSame('Article', $withSymfony);
        self::assertSame($withRefection, $withSymfony);
    }
}