我有两个班级
class A{
public function Get($a='0',$b=''){
retrun 0;
}
}
class B extends A{
public function Get($a){
return 0;
}
}
当我使用PHP 5.3.4在实时服务器上迁移应用程序时,它使用PHP 5.2.5在本地计算机上工作,它发出以下错误:
Declaration of B::Get() should be compatible with that of A::get()
我该怎么办?我无法更改远程服务器的PHP版本。
答案 0 :(得分:2)
Get()的函数声明需要匹配A类和B类,即它们需要具有相同数量的参数。从上面的例子中可以看出,A :: Get()接受2个参数而B :: Get()只接受一个参数。他们都需要2。
答案 1 :(得分:1)
基本上你问题的根源是API。
如果你有两个类有两个完全不同的方法,那么一个不能是其他的子类。这是错的。
但我们假设你无能为力。在这种情况下,最简单的修复方法是更改B :: get()的声明:
class B extends A
{
public function get( $a , $b = null )
{
return $this->do_something_with( $a );
}
}
通过这种方式,您可以完全忽略第二个参数,但不需要它。
但这是一个坏主意。
但请记住,整个情况都是违反Liskov substitution principle的原因。图像应该有助于理解它:
答案 2 :(得分:0)
class A{
public function Get($a='0',$b=''){
retrun 0;
}
}
class B extends A{
public function Get($a){
return parent::Get($a,null);
}
}
它正在使用php 5.3.5。