PhpStorm检查bug还是坏代码?不会在try块中抛出异常是意外的

时间:2018-03-21 17:51:23

标签: php exception-handling phpstorm

我正在使用PhpStorm并且我在一个子类的父类中抛出一个自定义异常,我有一个实例。

我没有从子进程中的父调用中捕获异常,因为我希望捕获它是在子类实例上进行调用的代码的责任。

PhpStorm抱怨在try块中没有抛出被捕获的异常,但是父对象的方法确实抛出它,这个方法是从try块中调用的子方法调用的。

这是检查员的错误还是我在这里做错了什么?

以下是一些复制问题的示例代码:

<?php

class testE extends \Exception {
}


class parentClass {

    public function testMethod() {
        throw new testE('test exception');
    }
}

class childClass extends parentClass {

    public function doSomething() {
        $this->testMethod();
    }
}

$test = new childClass;
try {
    $test->doSomething();
} catch(testE $e) {
    //   ^--- why does this report no throw in try?
    // Exception 'testE' is never thrown in the corresponding try block
    // Will this still work even though phpstorm complains?
}

这是一张照片

screenshot

1 个答案:

答案 0 :(得分:4)

如有疑问,请使用PhpStorm检查您的评论:

class testE extends \Exception
{
}

class parentClass
{

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

class childClass extends parentClass
{

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

$test = new childClass;
try {
    $test->doSomething();
} catch (testE $e) {
    //   ^--- why does this report no throw in try?
    // Exception 'testE' is never thrown in the corresponding try block
    // Will this still work even though phpstorm complains?
}

Voila,狡猾的PhpStorm突然理解你的代码,如下所示:

enter image description here