调用PHP接口方法

时间:2011-12-03 03:53:55

标签: php oop interface

好的,我正在尝试开始真正学习PHP中的OOP风格。我已声明了接口和类,并具有实现接口的类。我想知道,是不是只能将接口文件加载到PHP脚本文件中并从接口调用方法而不是加载类实现文件?如果是这样,那将如何做到b / c我无法找到答案。谢谢!

3 个答案:

答案 0 :(得分:6)

接口没有实现,所以你不能这样做。他们的目的是规定“契约”(在“实现此接口的类承诺提供公共方法X Y和Z”的意义上),实现接口的类必须遵守。

这真的是非常基本的OOP,它不适用于PHP。在你试图进一步发展之前,我建议你研究更多的OOP理论。

答案 1 :(得分:2)

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

答案 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类的功能。我们可以根据需要以多种不同的方式实现此界面。然后我们可以在不影响我们的代码的情况下在界面的实现之间切换,因为界面定义了我们将如何使用它而不管它实际如何工作。