首页 > 解决方案 > php从不同的接口实现相同的功能

问题描述

有许多 php 组件,每个组件都需要实现自己的接口或类似 psr 的东西。

如果我必须从不同的组件实现两个不同的接口,并且这些接口具有相同的功能,换句话说,相同的签名或功能名称,

我可以在一个类中实现这些接口吗?

像这种情况。

interface I1FromComponent1 {
    function getName:string
}

interface I2FromComponent2 {
    function getName:Name(or NameInterface)
}

Myclass {

function getName():string {
    return $this->name;
}

}

标签: php

解决方案


PHP 不支持方法重载,为了解决这个问题,PHP 手册说明了它是 OOP 的实现...

一个类可以实现两个定义同名方法的接口,前提是两个接口中的方法声明相同

接口的目的是确保在整个代码中一致地使用函数,并与支持这些特性的 IDE 中的类型提示和代码嗅探相关联。如果没有重载,代码如何处理这样的事情?

// Works for string return type, but will only return a string for
// NameInteface return type if it implements the __toString() method
echo $this->getName();

// Works for NameInterface return type, but fails for string return type
$var2 = $this->getName()->nameMethod;

您最好的选择是让接口定义不同的方法,一种用于每种返回类型:

interface I1FromComponent1 {
    function getName() : string;
}
    
interface I2FromComponent2 {
    function getNameObject() : NameInterface;
}

推荐阅读