1

有没有办法避免parent::PHP 类中的静态访问器,或者这是其中一个使用的时间@SuppressWarnings(StaticAccess)

StaticAccess同样,这个警告似乎出现在可疑的地方。例如,异常处理 - 当 I 时throw new Exception(...),PHPMD 抱怨静态访问。但是......实际上并没有其他方法可以做到这一点(我发现)所以我有比我想要的更多的警告抑制器。这是正常的吗?

编辑

根据要求,这是一个示例 - 它非常简单:

class aaa {
    private $someReasonForAnException = true;

    public function __construct() {
        echo 'AAA<br>';
        if ($this->someReasonForAnException) {
            throw new Exception("Something happened that's worth noticing!");
        }
    }
}

class bbb extends aaa {    
    public function __construct() {
        echo 'BBB<br>';
        parent::__construct();
    }
}

$BBB = new bbb();

PHPMD 将报告上述两个错误:一个StaticAccess错误Exception,以及一个调用StaticAccess错误。parent::__construct()

为避免这种情况,我必须用 来标记这两个类@SuppressWarnings,这看起来很笨拙,并且也不会显示“真正的”静态访问问题。

4

3 回答 3

5

一个简单且可持续的解决方案可能是

于 2015-07-08T14:24:31.840 回答
4

没有其他方法可以在 PHP 上引用 parent 的方法实现。您的代码没有任何问题,PHPMD 喝醉了。静态访问的唯一问题是因为 PHP 允许您将实例方法作为静态方法调用(如果它不引用$this变量),但这样做没有意义。您可以忽略这种警告。

编辑:

如果你有这样的事情:

class Foo {
    public function bar() {
        echo 'bar';
    }
}

PHP 将允许您执行以下操作:

Foo::bar(); // works

但如果你有这个:

class Foo {
    private $bar = 'bar';
    public function bar() {
        echo $this->bar;
    }
}

Foo::bar(); // fatal error
于 2013-09-04T02:21:54.463 回答
0

因为我大量使用 self:: 作为常量,所以将 phpmd 代码更改为接受 self:: 和 parent::。

在程序 PHP/PMD/Rule/CleanCode/StaticAccess.php 的第 36 行,更改为:

if ($this->isReferenceInParameter($reference)
    || $reference->getImage() === 'self' 
    || $reference->getImage() === 'parent' 
    ) {
    continue;
}
于 2014-05-25T15:30:23.747 回答