根据选择的接口实现接口
Implementing interface based on the chosen interface
所以如果我有一个接口 iConnection
interface iConnection
{
}
实现者:
class OutlookConnection implements iConnection
{
}
和
class GoogleConnection implements iConnection
{
}
还有另一个界面iComparison
interface iComparison
{
}
实现者:
class OutlookComparison implements iComparison
{
private $connection;
public function __construct($user, iConnection $iConnection) {
$this->connection = $iConnection;
}
}
和
class GoogleComparison implements iComparison
{
private $connection;
public function __construct($user, iConnection $iConnection) {
$this->connection = $iConnection;
}
}
在主程序中,我希望能够根据 iConnection 类型在 GoogleComparison 和 OutlookComparison 之间切换,而无需使用 if 或 switch 语句:
public function __construct(iConnection $connection)
{
$this->connect = $connection;
if($this->connection instanceof GoogleConnection){
$this->comparison = new GoogleComparison();
}
elseif($this->connection instanceof OutlookConnection){
$this->comparison = new OutlookComparison();
}
}
这是否可以在没有 switch 或 if 语句的情况下在此构造函数中实现?
这是一个架构问题。我建议将提供 comparison
的责任转移给 connection
。 一种可能的解决方案如下所示。
首先 - 接口获取 getter 存根:
interface iConnection
{
public function getComparison();
}
然后 - 所有不同的连接都按照您的需要实现它,例如:
class OutlookConnection implements iConnection
{
public function getComparison()
{
return new OutlookComparison();
}
}
最后,您的构造类似于:
public function __construct(iConnection $connection)
{
$this->connect = $connection;
$this->comparison = $connection->getComparison();
}
从现在开始,您可以对比较 属性 进行操作,也可以只对 $this->connect->getComparison()->fooBarBaz()
进行操作。一切都取决于您的需求。
所以如果我有一个接口 iConnection
interface iConnection
{
}
实现者:
class OutlookConnection implements iConnection
{
}
和
class GoogleConnection implements iConnection
{
}
还有另一个界面iComparison
interface iComparison
{
}
实现者:
class OutlookComparison implements iComparison
{
private $connection;
public function __construct($user, iConnection $iConnection) {
$this->connection = $iConnection;
}
}
和
class GoogleComparison implements iComparison
{
private $connection;
public function __construct($user, iConnection $iConnection) {
$this->connection = $iConnection;
}
}
在主程序中,我希望能够根据 iConnection 类型在 GoogleComparison 和 OutlookComparison 之间切换,而无需使用 if 或 switch 语句:
public function __construct(iConnection $connection)
{
$this->connect = $connection;
if($this->connection instanceof GoogleConnection){
$this->comparison = new GoogleComparison();
}
elseif($this->connection instanceof OutlookConnection){
$this->comparison = new OutlookComparison();
}
}
这是否可以在没有 switch 或 if 语句的情况下在此构造函数中实现?
这是一个架构问题。我建议将提供 comparison
的责任转移给 connection
。 一种可能的解决方案如下所示。
首先 - 接口获取 getter 存根:
interface iConnection
{
public function getComparison();
}
然后 - 所有不同的连接都按照您的需要实现它,例如:
class OutlookConnection implements iConnection
{
public function getComparison()
{
return new OutlookComparison();
}
}
最后,您的构造类似于:
public function __construct(iConnection $connection)
{
$this->connect = $connection;
$this->comparison = $connection->getComparison();
}
从现在开始,您可以对比较 属性 进行操作,也可以只对 $this->connect->getComparison()->fooBarBaz()
进行操作。一切都取决于您的需求。