支持多个php签名

我使用的是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);
    }

}

如果有人有更好的解决方案,请与我们分享

点赞