我正在使用一个 PHP 库,它有以下功能:
public function call(\Phalcon\Mvc\Micro $application);
但在这个库的旧版本中,此函数是这样实现的:
public function call($application);
当我在我的代码中实现这个函数时,我需要根据我正在使用的库的版本更改已实现函数的签名。如何支持两个版本而无需为每个版本构建两个版本的代码?
我正在使用一个 PHP 库,它有以下功能:
public function call(\Phalcon\Mvc\Micro $application);
public function call($application);
我最终做了以下事情, 1- 首先我创建了一个工厂来根据Phalcon版本获取正确的实现:
class X
{
public static function getMiddleware(){
$oX = new X();
if ((int)\Phalcon\Version::getId()/1000000 >= 2) {
return new XV2($oX);
} else {
return new XV1($oX);
}
}
public function call($application)
{
// do your business here
}
}
2- 然后我基于正确的接口实现了这个类两次,但实际调用将在调用者类中进行:
class XV1 implements MiddlewareInterface
{
private $_oX;
public function __construct($oX)
{
if (!isset($oX) || $oX == null){
throw new Exception("X couldn't be null or empty");
}
$this->_oX = $oX;
}
public function call($application)
{
return $this->_oX->call($application);
}
}
class XV2 implements MiddlewareInterface
{
private $_oX;
public function __construct($oX)
{
if (!isset($oX) || $oX == null){
throw new Exception("X couldn't be null or empty");
}
$this->_oX = $oX;
}
public function call(\Phalcon\Mvc\Micro $application)
{
return $this->_oX->call($application);
}
}
如果有更好的解决方案,请与我们分享。