Récupérer le nom du type d'une variable pour déboguer avec PHP

Publié le 23/04/2022 • Mis à jour le 23/04/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 du type d'une variable pour déboguer. La fonction The get_debug_type() a été introduite dans PHP 8 et est encore méconnue. Avant, on devait utiliser la fonction gettype(). Pour comprendre la différence avec sa grande sœur, j'affiche la sortie des deux fonctions. Comme on peut le voir, la nouvelle fonction est spécialement pratique avec les objets puisqu'elle affiche le nom de la classe au lieu du très générique type object.


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

/**
 * 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 Snippet199Trait
{
    public function snippet199(): void
    {
        /** @var resource $fp */
        $fp = fopen(__FILE__, 'rb');
        /** @var resource $fpClosed */
        $fpClosed = fopen(__FILE__, 'rb');
        fclose($fpClosed);

        $variables = [
            'null' => null,
            'true' => true,
            'false' => false,
            '555' => 555,
            '0.5' => 0.5,
            "'foo'" => 'foo',
            "['foo' => 'bar']" => ['foo' => 'bar'],
            '$fp' => $fp,
            '$fpClosed' => $fpClosed,
            '$this' => $this,
            'new class {}' => new class() {}, // @phpstan-ignore-line, false positive
            'function() {}' => static function () {},
        ];

        foreach ($variables as $code => $variable) {
            echo 'get_debug_type('.$code.') = '.get_debug_type($variable).PHP_EOL;
            echo 'gettype('.$code.') = '.\gettype($variable).PHP_EOL.PHP_EOL;
        }
        fclose($fp);

        // That's it! 😁
    }
}

 Exécuter le snippet  Plus sur Stackoverflow   Lire la doc  Plus sur le web  Snippet aléatoire