2011-12-03 81 views
0

好吧我试图开始真正学习PHP中的OOP风格。我已经声明了接口和类,并且有实现接口的类。但是我想知道,是不是可以将接口文件加载到PHP脚本文件中,并从接口调用方法而不是加载类实现文件?如果是这样,那么如何做到这一点我找不到答案。谢谢!调用PHP接口方法

回答

5

接口可能没有实现,所以你不能这样做。他们的目的是规定“合同”(即“实现这个接口的类承诺提供公共方法X Y和Z”),这些类(实现接口)必须遵守。

这实际上是非常基本的面向对象的东西,它不适用于PHP。我建议在尝试进一步研究之前,先研究一些更多的面向对象的理论。

+0

谢谢!是的,我从书中读了一些东西后感到困惑,并认为这就是告诉我要做的事。大声笑我很习惯程序化的做事方式。 – vol4life27

2

您无法在接口上调用方法。一个接口不能实例化。您必须创建一个实现该接口并使用该类的类。

0

提供了INTERFACE,因此您可以描述一组函数,然后隐藏这些函数在实现类中的最终实现。这使您可以更改这些功能的实现,而无需更改使用方法。

例如:我有一个数据库。我想编写一个访问数据库中的数据的类。我定义了这样一个接口:

interface Database { 
function listOrders(); 
function addOrder(); 
function removeOrder(); 
... 
} 

那么我们假设我们开始使用MySQL数据库。所以我们写一个类来访问MySQL数据库:

class MySqlDatabase implements Database { 
function listOrders() {... 
} 

我们根据需要编写这些方法来获取MySQL数据库表。然后,你可以写你的控制器使用接口,例如:

$database = new MySqlDatabase(); 
foreach ($database->listOrders() as $order) { 

然后让我们说,我们决定迁移到Oracle数据库。我们可以编写另一个类来获取到Oracle数据库这样的:

class OracleDatabase implements Database { 
public function listOrders() {... 
} 

然后 - 切换我们的应用程序使用Oracle数据库,而不是MySQL数据库中,我们只需要修改一行代码:

$database = new OracleDatabase(); 

的代码的所有其它线路,如:

foreach ($database->listOrders() as $order) { 

将保持不变。关键是 - INTERFACE描述了我们访问数据库所需的方法。它不会以任何方式描述我们如何实现这一目标。这就是IMPLEMENTing类所做的。我们可以根据需要以尽可能多的方式多次执行此界面。然后,我们可以在不影响我们的代码的情况下在接口的实现之间切换,因为接口定义了我们将如何使用它,而不管它实际上如何工作。