在重构后,我们在其中一个类中得到了以下代码:
最终结果是$this->foo['blubb']一直被设置,而不仅仅是一次。这是由于PHP的魔术方法所致。我们不希望动态访问字段成为可能,所以我想添加一个代码嗅探规则。但我没有找到任何规则,并问自己为什么。
PHPStorm在那里显示了一个声明动态字段的提示,但我希望在部署周期中使用代码嗅探器(或类似工具)自动失败。
有人有什么好主意吗?有好的规则吗?我应该编写自己的规则吗?或者禁用它是否是不好的实践?
免责声明:我们使用测试,但有时会漏掉一些东西...最好是在第一时间防止这种情况发生。另外,请不要提出覆盖魔术方法的建议。我不想在每个类中都使用特性/抽象等。
class FooBar
{
// $foo was $bla before
private $foo;
public function setBlubbOnArrayOnlyOnce($value)
{
// $this->bla was forgotten during refactoring. Must be $this->foo
if(!isset($this->bla['blubb'])) {
$this->foo['blubb'] = $value;
}
}
}
最终结果是$this->foo['blubb']一直被设置,而不仅仅是一次。这是由于PHP的魔术方法所致。我们不希望动态访问字段成为可能,所以我想添加一个代码嗅探规则。但我没有找到任何规则,并问自己为什么。
PHPStorm在那里显示了一个声明动态字段的提示,但我希望在部署周期中使用代码嗅探器(或类似工具)自动失败。
有人有什么好主意吗?有好的规则吗?我应该编写自己的规则吗?或者禁用它是否是不好的实践?
免责声明:我们使用测试,但有时会漏掉一些东西...最好是在第一时间防止这种情况发生。另外,请不要提出覆盖魔术方法的建议。我不想在每个类中都使用特性/抽象等。
$this->bla
通常可以在父类中定义。Codesniffer在文件/令牌级别上工作,如果你遵循PSR编码标准,它将无法知道父类结构(因为它在单独的文件中)。 - weirdan