PHP 8.1 : récupérer la FQCN d'une variable avec ::class

Publié le 11/09/2022 • Mis à jour le 11/09/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 la FQCN d'une variable avec ::class. C'est une nouvelle fonctionnalité introduite dans PHP 8.1. Avant, on pouvait seulement utiliser :class sur une classe. Maintenant, on peut aussi le faire sur une variable, ce qui est plus élégant que d'utiliser la fonction get_class(). Retrouver tous les snippets relatifs aux nouvelles fonctionnalités PHP 8.1 ici.


<?php

declare(strict_types=1);

// src/Controller/Snippet/Snippet219Trait.php

namespace App\Controller\Snippet;

use Symfony\Component\HttpFoundation\Request;

/**
 * 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 Snippet219Trait
{
    public function snippet219(Request $request): void
    {
        echo 'Class with ::class ='.$request::class.PHP_EOL;

        echo 'Class with get_class() ='.\get_class($request);

        // That's it! 😁
    }
}

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

<?php

declare(strict_types=1);

namespace App\Tests\Integration\Controller\Snippets;

use PHPUnit\Framework\TestCase;
use Symfony\Component\HttpFoundation\Request;

/**
 * @see Snippet219Trait
 */
final class Snippet219Test extends TestCase
{
    /**
     * @see Snippet219Trait::snippet219
     */
    public function testSnippet219(): void
    {
        $request = new Request();

        self::assertSame($request::class, \get_class($request));
    }
}