这个问题听起来很明显,也可能是愚蠢的。但我想弄清楚为什么我需要使用接口?我认为我可以处理接口使用类的大部分事情,那么使用它们有什么意义?确实,如果我不接口,我可能会遇到问题,但我试图找出不使用接口导致的问题。真实世界的接口实现
接口的一种用法是它们允许我们定义行为并对实现它们的类进行限制。
另一个用途是将接口工作为类型,我可以使用类型提示的接口,如下所示。
//Java example
public interface IPaintable{
void Paint(System.Drawing.Color color);
}
public void Paint(IPaintable item, System.Drawing.Color color){
item.Paint(color);
}
但是在PHP中有没有其他使用接口?
I.e.通过使用下面的代码中的接口,我可以获得什么优势。
//Non interface implementation
<?php
class DBPersonProvider
{
public function getPerson($givenName, $familyName)
{
/* go to the database, get the person... */
$person = new Person();
$person->setPrefix("Mr.");
$person->setGivenName("John");
return $person;
}
}
/* I need to get person data... */
$provider = new DBPersonProvider();
$person = $provider->getPerson("John", "Doe");
echo($person->getPrefix());
echo($person->getGivenName());
?>
//Implementation with interface
<?php
interface PersonProvider
{
public function getPerson($givenName, $familyName);
}
class DBPersonProvider implements PersonProvider
{
public function getPerson($givenName, $familyName)
{
/* pretend to go to the database, get the person... */
$person = new Person();
$person->setPrefix("Mr.");
$person->setGivenName("John");
return $person;
}
}
/* I need to get person data... */
$provider = new DBPersonProvider();
$person = $provider->getPerson("John", "Doe");
echo($person->getPrefix());
echo($person->getGivenName());
?>
您使用接口定义**协议**。你得到的是可靠性的基础。想象一下'人'。每个人都有一个有器官的身体。因此你的界面会实现器官。每个人都不同。约翰,杰克,迈克尔,克里斯蒂娜等都是不同的,但都是由功能相同的部件组成的。因此,当你创建一个新的人时,你可以**创建它们的核心部分,它们可以互相协作并使身体工作。这就是接口在那里的原因 - 他们在任何实施类上强制执行协议。 –
同意。我在我的问题中指出了这一点:“接口的一个用途是它们允许我们定义行为并对实现它们的类进行限制。” –
这就是你所得到的。使用接口没有其他好处。如果你有一个小项目,你可能不会受益太多。然而,如果你有50人正在开发一个项目,并且你是一个功能的核心开发人员 - 那么使用一个由抽象类实现的接口是一个明智的举动,然后由其他开发人员的类进行扩展。你只是执行一个协议。这大多是建筑和组织方面的事情。 –