有没有办法避免PHP类中的parent::
静态访问器,或者这是使用@SuppressWarnings(StaticAccess)
的时间之一?
同样,似乎这个StaticAccess
警告在可疑的地方突然出现。例如,异常处理 - 当我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
来表示这两个类,这看起来很笨,并且也不会显示“真正的”静态访问问题。
答案 0 :(得分:5)
一个简单而可持续的解决方案可能是
答案 1 :(得分:4)
没有其他方法可以在PHP上引用父方法的实现。您的代码没有任何问题,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
答案 2 :(得分:0)
因为我使用了很多self :: for常量,所以更改phpmd代码以接受self :: and parent ::。
在第36行的PHP / PMD / Rule / CleanCode / StaticAccess.php程序中,更改为:
if ($this->isReferenceInParameter($reference)
|| $reference->getImage() === 'self'
|| $reference->getImage() === 'parent'
) {
continue;
}