Php 菲律宾比索7“;声明..应兼容“;对于参数类型

Php 菲律宾比索7“;声明..应兼容“;对于参数类型,php,inheritance,arguments,php-7,Php,Inheritance,Arguments,Php 7,我正在使用一个框架,该框架定义了如下内容 class Abc { public function doThis($what) { ... } } 因为我使用的是PHP 7,也是PHP codesniffer的粉丝,所以它告诉我定义函数参数类型,也就是说我在代码中编写了类:- class Pqr extends Abc { public function doThis(string $what) { ... } } 这段代码为我提供了Pqr::doThis(字符

我正在使用一个框架,该框架定义了如下内容

class Abc {
  public function doThis($what) {
    ...
  }
}
因为我使用的是PHP 7,也是PHP codesniffer的粉丝,所以它告诉我定义函数参数类型,也就是说我在代码中编写了类:-

class Pqr extends Abc {
  public function doThis(string $what) {
    ...
  }
}
这段代码为我提供了Pqr::doThis(字符串$what)应该与Abc::doThis($what)兼容的警告声明

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


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

代码嗅探器可能会告诉您做一些事情,您可能希望遵循它的建议,但是如果您的框架没有做到这一点,那么您也可能无法做到。不能将代码规则指定给框架;你必须接受它强加给你的东西,即使这违反了代码嗅探器的规则

我的建议是忽略这个问题。代码嗅探器是一个很好的工具,它的建议值得遵循,但有时您根本无法做到这一点


如果您的目标是让系统显示零代码嗅探器警告,那么您可以通过向代码中显式添加标记,告诉代码嗅探器忽略代码中各个点的特定规则来实现。代码嗅探器能够忽略代码段;这在它的文档页面中有描述。

您正在重载该方法,因此参数必须相同。