Tester la version courante de PHP

Publié le 19/11/2021 • Mis à jour le 19/11/2021


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 tester la version courante de PHP. Pour ce faire, nous utilisons la constante PHP_VERSION_ID. Voici comment ça marche : le premier chiffre correspond à la version majeure 8, les deux chiffres suivants correspondent à la version mineure. Les deux derniers sont pour la version de publication (release). 80100 veut dire 8.1, 80012 : 8.0.12 et ainsi de suite. Par exemple, dans le test unitaire suivant, je vérifie si j'utilise une version de PHP inférieure à 8.1. Si c'est le cas, j'exécute des tests spécifiques qui planteraient avec PHP 8.1 puisque les variables privées sont désormais accessibles par défaut. J'ai besoin de faire cela, car ma CI tourne à la fois sur PHP 8.0 et 8.1 pour m'assurer que mon projet est prêt pour cette future version mineure.


<?php

declare(strict_types=1);

namespace App\Tests\Controller\Snippets;

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\HttpFoundation\Request;

/**
 * @covers Snippet74Trait
 */
final class Snippet61Test extends KernelTestCase
{
    /**
     * @covers Snippet61Trait::snippet61
     */
    public function testSnippet61(): void
    {
        $request = Request::create('/en/snippets/modifying-a-private-class-property-at-runtime');
        $property = (new \ReflectionClass($request))->getProperty('isHostValid');

        // As of PHP 8.1, private properties are accessible with reflection!
        // @see https://phpbackend.com/blog/post/php-8-1-accessing-private-protected-properties-methods-via-reflection-api-is-now-allowed-without-calling-setAccessible
        if (PHP_VERSION_ID < 80100) {
            try {
                self::assertNull($property->getValue($request));
                self::fail('A ReflectionException should be raised!');
            } /* @noinspection PhpRedundantCatchClauseInspection */
            catch (\ReflectionException) {
            }
        }

        $property->setAccessible(true);
        self::assertTrue($property->getValue($request));
        $property->setValue($request, false);
        self::assertFalse($property->getValue($request));
    }
}

 Plus sur Stackoverflow   Lire la doc  Plus sur le web  Voir un Tweet relatif  Snippet aléatoire