参数类型的PHP 7“声明..应该兼容”

时间:2018-11-12 15:13:54

标签: php inheritance arguments php-7

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

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

由于我使用的是PHP 7,也是PHP的代码迷,因此它告诉我定义函数参数类型,即我已在代码中编写类:-

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

此代码给我警告Pqr :: doThis(string $ what)的声明应与Abc :: doThis($ what)兼容

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

还有什么更好的解决办法了吗?

1 个答案:

答案 0 :(得分:3)

代码嗅探器很可能会告诉您做某事,并且您可能希望遵循它的建议,但是如果您的框架没有这样做,那么您也可能无法做到。您无法将代码规则分配给框架;即使这违反了Code Sniffer的规则,您也必须忍受它强加给您的东西。

我的建议是简单地忽略此问题。代码嗅探器是一个很棒的工具,它的建议值得遵循,但是有时您根本做不到。

如果您的目标是使系统显示零“代码嗅探器”警告,则可以通过在代码中显式添加标记来告诉“代码嗅探器”忽略代码中各个点处的特定规则来做到这一点。代码嗅探器可以忽略代码部分;在Advanced Usage文档页面中对此进行了说明。