4 votes

Le bogue d'inspection de PhpStorm ou le mauvais code ? L'exception non lancée dans le bloc try est inattendue

Je suis en train d'utiliser PhpStorm et je lance une exception personnalisée dans la classe parent d'une classe enfant dont j'ai une instance.

Je n'attrape pas l'exception de l'appel parent dans l'enfant parce que je veux que ce soit la responsabilité du code effectuant l'appel sur l'instance de la classe enfant.

PhpStorm se plaint que l'exception attrapée n'est pas lancée dans le bloc try, mais la méthode sur le parent le fait, cette méthode est appelée depuis la méthode enfant qui est appelée dans le bloc try.

S'agit-il d'un bogue de l'inspecteur ou est-ce que je fais quelque chose de mal ici ?

Voici un code d'exemple qui reproduit le problème :

testMethod();
    }
}

$test = new childClass;
try {
    $test->doSomething();
} catch(testE $e) {
    //   ^--- pourquoi cela ne signale-t-il pas de lancer dans le try?
    // Exception 'testE' n'est jamais lancée dans le bloc try correspondant
    // Est-ce que cela fonctionnera quand même même si PhpStorm se plaint ?
}

Et voici une image

capture d'écran

4voto

YvesLeBorg Points 5816

Lorsque vous avez des doutes, vérifiez vos commentaires avec PhpStorm :

class testE extends \Exception
{
}

class parentClass
{

    /**
     * @throws testE      <- ajouté ceci
     */
    public function testMethod()
    {
        throw new testE('test exception');
    }
}

class childClass extends parentClass
{

    /**
     * @throws testE          <- ajouté ceci
     */
    public function doSomething()
    {
        $this->testMethod();
    }
}

$test = new childClass;
try {
    $test->doSomething();
} catch (testE $e) {
    //   ^--- pourquoi signale-t-il qu'il n'y a pas de lancer dans le try ?
    // L'exception 'testE' n'est jamais lancée dans le bloc try correspondant
    // Est-ce que cela fonctionnera même si PhpStorm se plaint ?
}

Voilà, PhpStorm râleur comprend soudainement votre code, comme le montre cet exemple :

description de l'image

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X