关于oop:php多个实现相同接口的类

PHP multiple classes implementing same interface

如果我有一个PHP接口,比如

1
2
interface AuthenticationInterface {
}

以及两个实现接口的类,例如

1
2
3
4
5
class ApiKey implements AuthenticationInterface {
}

class AuthToken implements AuthenticationInterface {
}

当实例化中的新authenticationInterface时,如何确定使用这些类中的哪些类?


接口用于为继承它的类定义结构(体系结构)。

An interface is a contract specifying a set of methods, fields and properties which will be available on any implementing object

我想你对这类工厂设计模式感兴趣。在这里阅读更多关于它的信息:PHP设计模式


如果你的对象是在上游某个地方为你实例化的,你只知道它实现了你的authenticationInterface接口(所以你知道它可以是少数类中的一个…在你的例子中是2),你可以通过使用instanceof来判断你的对象是哪个类。

1
2
3
4
if ($your_object instanceof ApiKey)
{
    echo 'object class is ApiKey';
}


无法实例化接口。您可以创建类的对象。