3

次のコード例を想定します。

/**
 * @method bool someMethod()
 */
class MyClass
{
    /**
     * @throws MyClassException
     */
    public function __call($method, $args)
    {
        if ($this->someCheck()) {
            throw new MyClassException();
        }
    }
}

//...
try {
    (new MyClass())->someMethod();
} catch (MyClassException $e) {  // Reported by PHPStorm as not thrown!
    // of course the exception is properly caught
}

@methoddocblockで宣言されたメソッドによってスローされた例外を IDE に検出させるにはどうすればよいですか? そうでない場合、これが可能かどうか疑問に思います-私の代替手段は何ですか?

このような@throws場合、マジックメソッドで宣言されているように見えますが、完全に無視されます。もちろん、インスペクションを無効にすることもできますが、これは私にとってクリーンな解決策ではありません...

4

2 に答える 2

2

2021年更新

最新の PhpStorm では動作しないようです。構文も PSR ドラフトから削除されたため、これはおそらく実行可能なソリューションではなくなりました。


元の答え

次の方法でマジック メソッドの例外を文書化できます。

/**
 * MyClass summary.
 * 
 * @method bool someMethod() {
 *     @throws MyClassException
 * }
 */
class MyClass {

    // ...
}

この構文は、PSR-5 ドラフトの一部です。標準はまだ受け入れられていませんが、PhpStorm ではうまく機能しているようです。

于 2018-07-26T09:21:41.687 に答える