你有些人在Stack Overflow上认为这可能是一个很好的实现吗?
例如,我有一个名为RequestInterface的接口,它有5个常量:
interface RequestInterface {
const GET = 1;
const POST = 2;
const PUT = 3;
const DELETE = 4;
const HEAD = 5;
public function getType();
// ... some other methods declarations
}
然后对于每个常量,实现该接口的类,例如, PostRequest:
class PostRequest implements RequestInterface {
public function getType() {
return RequestInterface::POST
}
}
PUT请求:
class PutRequest implements RequestInterface {
public function getType() {
return RequestInterface::PUT
}
}
对于其他课程也是如此.
我知道在界面中使用常量被一些人认为是反模式,但你对我所做的例子有什么看法,对于这种情况可能有什么更好的解决方案呢?
编辑:@pid你建议我使用get_class()或is_a()函数,例如如果我有另一个使用该RequestInterface的类,我可以摆脱这些常量,只需使用甚至instanceof来确定RequestInterface的类型?
// inside another class which uses a RequestInterface
public function someMethod(RequestInterface $request) {
if ($request instanceof PostRequest) {
// Request is a post...
}
}
最佳答案 考虑到接口定义很可能暴露给客户端应用程序.您不希望在该文件中包含实现细节.客户端程序员想要查看您的接口定义,并查看重要的内容,即API合同,其含义已在文档中描述.
常数的实际值并不重要.实际上,通过将它放在接口定义中来暴露它会使常量的使用无效…忽略实际值以支持助记符/拟声词术语(onomato … =>它听起来像是什么,没有文档/解释需要立即了解它).