PHP 7 "declaration..should be compatible" 参数类型

PHP 7 "declaration..should be compatible" for argument types

我正在使用一个框架,其方法定义类似于

class Abc {
  public function doThis($what) {
    ...
  }
}

由于我使用的是 PHP 7 并且也是 PHP codesniffer 的粉丝,它告诉我定义函数参数类型,也就是说我在代码中写了 class: -

class Pqr extends Abc {
  public function doThis(string $what) {
    ...
  }
}

This code gives me warning Declaration of Pqr::doThis(string $what) should be compatible with Abc::doThis($what)

似乎 PHP 对 Abc class 中的 $what 的处理方式不同(不是字符串)。由于 Abc 是框架的一部分,我对此无能为力。我不想删除我的代码中的参数类型,并希望使 cngode 更严格。禁用所有警告不是个好主意。

我们有什么更好的办法来解决这个问题吗?

Code Sniffer 可能会告诉您做某事,您可能想听从它的建议,但如果您的框架没有这样做,那么您可能也无法做到。您不能将代码规则指定给框架;你必须忍受它强加给你的东西,即使这违反了 Code Sniffer 的规则。

我的建议是简单地忽略这个问题。 Code Sniffer 是一个很棒的工具,它的建议值得遵循,但有时您根本做不到。

如果您的目标是让您的系统显示零个 Code Sniffer 警告,那么您可以通过在代码中显式添加标记来告诉 Code Sniffer 忽略代码中不同位置的特定规则。 Code Sniffer 能够忽略部分代码;这在它的 Advanced Usage 文档页面中有描述。