gpt4 book ai didi

php - 支持多重php签名

转载 作者:可可西里 更新时间:2023-10-31 23:29:42 26 4
gpt4 key购买 nike

我正在使用一个 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- 然后我根据正确的接口(interface)实现了两次这个类,但是实际调用将在调用者类中:

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);
}

}

如果大家有更好的解决方案请分享给我们

关于php - 支持多重php签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31852877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com