php – 使用带有常量的接口作为类的多态行为的开始是一种好习惯吗?

你有些人在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 … =>它听起来像是什么,没有文档/解释需要立即了解它).

点赞