Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP函数兼容性问题_Php_Oop - Fatal编程技术网

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来抑制错误。