PHP函数兼容性问题
我有两门课PHP函数兼容性问题,php,oop,Php,Oop,我有两门课 class A{ public function Get($a='0',$b=''){ retrun 0; } } class B extends A{ public function Get($a){ return 0; } } 当我使用PHP 5.3.4在live server上迁移应用程序时,它正在使用PHP 5.2.5在本地机器上工作,出现以下错误: Declaration of B::Get() should be compatible with tha
class A{
public function Get($a='0',$b=''){
retrun 0;
}
}
class B extends A{
public function Get($a){
return 0;
}
}
当我使用PHP 5.3.4在live server上迁移应用程序时,它正在使用PHP 5.2.5在本地机器上工作,出现以下错误:
Declaration of B::Get() should be compatible with that of A::get()
我该怎么办?我无法更改远程服务器的PHP版本 Get()的函数声明需要与类A和B匹配,也就是说,它们需要有相同数量的参数。从上面的示例来看,A::Get()接受2个参数,B::Get()只接受一个参数。它们都需要取2。Get()的函数声明需要与类A和B匹配,也就是说,它们需要具有相同数量的参数。从上面的示例来看,A::Get()接受2个参数,B::Get()只接受一个参数。它们都需要取2。基本上,问题的根源是API损坏 如果有两个类有两个完全不同的方法,那么其中一个不能是另一个的子类。这是错误的 但是让我们假设你对此无能为力。在这种情况下,最简单的修复方法是更改B::get()的声明: 这样,您可以完全忽略第二个参数,而不需要它 但这是一个坏主意 但请记住,整个情况都是由于违反法律造成的。图像应有助于理解它:
class A{
public function Get($a='0',$b=''){
retrun 0;
}
}
class B extends A{
public function Get($a){
return parent::Get($a,null);
}
}
基本上,问题的根源在于API的损坏 如果有两个类有两个完全不同的方法,那么其中一个不能是另一个的子类。这是错误的 但是让我们假设你对此无能为力。在这种情况下,最简单的修复方法是更改B::get()的声明: 这样,您可以完全忽略第二个参数,而不需要它 但这是一个坏主意 但请记住,整个情况都是由于违反法律造成的。图像应有助于理解它:
class A{
public function Get($a='0',$b=''){
retrun 0;
}
}
class B extends A{
public function Get($a){
return parent::Get($a,null);
}
}
它使用的是PHP5.3.5
它正在使用PHP5.3.5。我不认为这是一个错误,它只是一个通知。最简单的修复方法是将seond参数添加到函数中,例如
函数get($a,$b=NULL)
,因此您不需要给出第二个参数,但声明对这两个参数都是相同的。但是我猜有这么多函数,但是您使用的是接口吗?没关系-你能检查一下是错误还是通知吗?如果是这样,您可以在php.ini或(.htaccess或ini_set())中禁用此类通知。。我不认为这是一个错误,它只是一个通知。最简单的修复方法是将seond参数添加到函数中,例如函数get($a,$b=NULL)
,因此您不需要给出第二个参数,但声明对这两个参数都是相同的。但是我猜有这么多函数,但是您使用的是接口吗?没关系-你能检查一下是错误还是通知吗?如果是这样,您可以在php.ini或(.htaccess或ini_set())中禁用此类通知。。查找E_STRICT(afaik),但我的应用程序中有数百万个这样的函数不推荐,但您可以通过关闭E_STRICT errors来抑制错误。但我的应用程序中有数百万个这样的函数不推荐,但您可以通过关闭E_STRICT errors来抑制错误。