方法的声明应该是兼容在PHP父方法

严格标准:childClass :: customMethod()声明应该与父类:: customMethod兼容()

什么是PHP这种错误的可能原因是什么? 我在哪里可以找到它的意思是兼容的信息

--------------解决方案-------------

childClass::customMethod()具有不同的参数,或不同的访问级别(公共/私有/保护)比parentClass::customMethod()

此消息意味着有可能无法在运行时的某些可能的方法调用。 假设你有

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的(),它不需要任何参数的要求。 $一个可能不过是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();
// ...

}
}

分类:php 时间:2015-03-16 人气:216
本文关键词: PHP,方法,标准符合性
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.745 (s). 11 q(s)