的确,PHP接口是有它的用途的。它们是其他开发人员的合同、指导手册。但是,仍然很难理解该接口的用途。基接口是抽象类,不能直接实例化,但可以实现。这是一个基本示例interfaceMyInterface{publicfunctionsetName(string$name);publicfunctiongetName();}classMyClassimplementsMyInterface{private$name;publicfunctionsetName(string$name){$this->name=$name;}publicfunctiongetName(){return$this->name;}}MyClass必须实现setName()和getName()方法。如果不这样做,您将遇到致命错误。致命错误:类MyClass包含2个抽象方法,因此必须声明为抽象或实现其余方法(MyInterface::setName,MyInterface::getName)此外,接口中定义的方法的可访问性必须是公共的,并且接口不能定义类成员。原因开发人员使用接口来描述一个类或一组类的共同行为。但是为什么它只负责封装实现而不处理每个类的细节呢?为了脱钩!接口允许您在不更改细节的情况下更改实现,即您如何使用此实现。更高级的例子任何缓存系统都需要以下功能存储/设置缓存中的内容获取缓存中的内容删除缓存中的内容基于此,我们可以创建一个缓存接口如下interfaceCacheInterface{publicfunctionset(string$键,$值);公共函数get(string$key);publicfunctiondelete(string$key);}这样开发者就可以知道缓存接口需要实现,而我们不需要知道如何实现。结果是我们可以轻松切换缓存系统而无需更改它们的使用方式。因此,在不改变缓存系统在项目中的使用方式的情况下,很容易改变缓存系统。Symfony例子下面我们来看一下刚才例子的具体应用。对于Symfony,如果你想实现任何缓存系统,最好的做法是按照以下方式使用Symfony\\Contracts\\Cache\\CacheInterface;classMyClass{private$cache;公共函数\_\_construct(CacheInterface$cache){$this->cache=$cache;}}通过依赖注入将缓存接口注入到我们的类中。下次我们修改缓存系统时,MyClass类将不需要做任何更改。MultipleimplementationsVSmultipleinheritancePHP不支持多重继承,下面的做法是不行的但是,您可以执行classClassYextendsClassX{}classMyClassextendsClassY{}但是ClassX和ClassY可能处理不同的事情,因此使用继承没有意义。如果你想执行多个行为,那么你可以有多个接口classMyClassimplementsInterfaceX,InterfaceY{}换句话说,你可以让一些类共享一些功能而不是共享一个父类。小结PHP接口是一个类的方法模板,对于实现和使用的解耦很有帮助。当您需要保持灵活性并确保所有开发人员都遵循一组规则时,此功能特别有用。
