PHP中的接口声明 - 为什么声明变得混杂?

时间:2016-11-19 21:16:42

标签: php interface namespaces

我要为我的类声明接口,如下所示:

namespace Helpers\Interfaces {
    interface Cache {
        public static function getInstance($profile = null);
    }
}

然后我像这样应用它们:

namespace Helpers {
    class Cache implements Interfaces\Cache {
        public static function getInstance($profile = null) {
            /* ... */
        }
    }
}

到目前为止,这么好(显然至少)。我遇到的问题是NetBeans给出了一个错误,指出我的类不是抽象的,也没有实现某种方法。

该方法属于我创建的对象,用于收集操作某些方法所需的配置参数,而不根据对象提供特定的配置选项(如主机,端口,API密钥等)。

在此示例中,此方法称为\Configuration\Helpers\Cache::getConfiguration($profile);

冲突的声明来自这个界面:

namespace Configuration\Helpers\Interfaces {
    interface Cache {
        public static function getConfiguration($profile = null);
    }
}

应用如下:

namespace Configuration\Helpers {
    class Cache implements Interfaces\Cache {
        public static function getConfiguration($profile = null) {
            /* ... */
        }
    }
}

它有效地混合了接口,尽管它们是命名空间! 我想要注意的是接口和实现这种接口的类声明总是在同一个文件中,每个对象一个文件。

NetBeans 8.2上的PHP版本为7.0.13。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的接口和类位于不同的命名空间中。您可能需要在类中添加一个use语句。例如,您可以添加:使用Helpers \ Interfaces作为接口。这一行可以超出类定义:class Cache实现Interfaces \ Cache。

另请参阅:http://php.net/manual/en/language.namespaces.definitionmultiple.php