好的,我正在尝试开始真正学习PHP中的OOP风格。我已声明了接口和类,并具有实现接口的类。我想知道,是不是只能将接口文件加载到PHP脚本文件中并从接口调用方法而不是加载类实现文件?如果是这样,那将如何做到b / c我无法找到答案。谢谢!
答案 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类的功能。我们可以根据需要以多种不同的方式实现此界面。然后我们可以在不影响我们的代码的情况下在界面的实现之间切换,因为界面定义了我们将如何使用它而不管它实际如何工作。