支持多个php签名



我正在使用一个php库,它有以下功能:

public function call(PhalconMvcMicro $application);

但是在这个库的旧版本中,这个函数就像:

public function call($application);

所以当我在我的代码中实现这个函数时,我必须根据我使用的这个库的版本改变实现函数的签名。如何在不需要为每个版本构建两个版本的代码的情况下同时支持两个版本?

最后我做了如下的事情:1-首先,我创建了一个工厂,以获得基于phalcon版本的正确实现:

class X
{
    public static function getMiddleware(){
        $oX = new X();
        if ((int)PhalconVersion::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(PhalconMvcMicro $application)
    {
        return $this->_oX->call($application);
    }
}

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

最新更新