严格标准:childClass :: customMethod()的声明应与parentClass :: customMethod()的声明兼容
PHP中此错误的可能原因是什么?在哪里可以找到有关兼容的信息?
use Closure;到类的顶部(因为类型提示是Closure)。所以...一定要检查您是否缺少像这样的依赖项。
                严格标准:childClass :: customMethod()的声明应与parentClass :: customMethod()的声明兼容
PHP中此错误的可能原因是什么?在哪里可以找到有关兼容的信息?
use Closure;到类的顶部(因为类型提示是Closure)。所以...一定要检查您是否缺少像这样的依赖项。
                Answers:
childClass::customMethod()与相比,具有不同的参数或不同的访问级别(公共/私有/受保护)parentClass::customMethod()。
parentClass::customMethod($thing = false)并且childClass::customMethod($thing)会触发错误,因为子方法尚未为第一个参数定义默认值。
                    &参数中的“&”号也可能触发此错误。
                    该消息表示存在某些可能的方法调用,这些方法调用可能在运行时失败。假设你有
class A { public function foo($a = 1) {;}}
class B extends A { public function foo($a) {;}}
function bar(A $a) {$a->foo();}编译器仅根据不需要参数的A :: foo()的要求检查调用$ a-> foo()。但是$ a可能是需要参数的类B的对象,因此调用将在运行时失败。
但是,这绝不会失败并且不会触发错误
class A { public function foo($a) {;}}
class B extends A { public function foo($a = 1) {;}}
function bar(A $a) {$a->foo();}因此,没有任何方法比其父方法具有更多的必需参数。
当类型提示不匹配时,也会生成相同的消息,但是在这种情况下,PHP的限制更大。这给出了一个错误:
class A { public function foo(StdClass $a) {;}}
class B extends A { public function foo($a) {;}}就像这样:
class A { public function foo($a) {;}}
class B extends A { public function foo(StdClass $a) {;}}这似乎比需要的限制更多,我认为这是由于内部因素造成的。
可见性差异会导致不同的错误,但出于相同的基本原因。没有任何一种方法比其父方法更不可见。
如果您想保留OOP表单而不关闭任何错误,还可以:
class A
{
    public function foo() {
        ;
    }
}
class B extends A
{
    /*instead of : 
    public function foo($a, $b, $c) {*/
    public function foo() {
        list($a, $b, $c) = func_get_args();
        // ...
    }
}func_get_args(),即B,public function foo($a = null, $b = null, $c = null)作为这不撕毁合同的承诺A。
                    在尝试从GitHub扩展现有类时遇到了这个问题。我要尝试解释一下自己,首先按原样编写课程,然后再按现在的方式写作。
我虽然
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
   public function whatever(): ClassOfVendor
   {
        return new ClassOfVendor();
   }
}我终于做了什么
namespace mycompany\CutreApi;
use \vendor\AwesomeApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
   public function whatever(): ClassOfVendor
   {
        return new \mycompany\CutreApi\ClassOfVendor();
   }
}因此,当您使用返回命名空间类的方法,并且尝试返回相同的类但使用其他命名空间时,似乎也会出现此错误。幸运的是,我已经找到了该解决方案,但是我还没有完全理解php 7.2中此功能的好处,对我来说,通常可以根据需要重写现有的类方法,包括重新定义输入参数和/或行为。方法。
以前的方法的一个缺点是,IDE无法识别\ mycompany \ CutreApi \ ClassOfVendor()中实现的新方法。因此,现在,我将继续该实现。
目前完成
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
   public function getWhatever(): ClassOfVendor
   {
        return new ClassOfVendor();
   }
}因此,我没有尝试使用“无论如何”的方法,而是编写了一个名为“ getWhatever”的新方法。实际上,他们两个都在做相同的事情,只是返回一个类,但是使用了前面所述的不同名称空间。
希望这可以帮助某人。
function customMethod( ... )为每个函数发布标题(仅第一行:),我们可以告诉您特定的问题