强制实现接口的类定义常量

我愿意强制我的类定义一个名为COMMAND的常量。 如果PHP允许覆盖接口中的常量,看起来像

class RequestInterface
{
    const COMMAND = "no-command-specified";
}

class LoginRequest implements RequestInterface
{
    const COMMAND = "loginuser";
    public $username;
    public $password;
}

$request = new LoginRequest();
$request->username = "user";
$request->password = "blah";

显然这是行不通的。 我正在寻找一种干净的方式来使我的请求定义COMMAND的助手。

我一直在考虑以下选项:

  • Interface定义了一个getCommand方法,我的请求类需要实现它并以字符串形式返回命令名称。 但是每个请求的代码太多了
  • 将接口替换为抽象类。 它看起来很奇怪,因为抽象类通常需要定义至少一种方法
  • 接口变成抽象类并定义一个受保护的变量$命令。 它也有一个返回$ this-> command;的getter方法。 孩子重写受保护的属性$命令。 我不喜欢将公共VARIABLES(应该是可变的)与一个受保护的VARIABLE混合在一起,这种VARIABLE实际上不应该是可修改的,因此不应该假设它是一个变量。

    class LoginRequest extends BaseRequest
    {
         protected $command = "loginuser";
         public $username;
         public $password;
    }
    
  • 什么是最简单的方法来实现这一点?


    就我个人而言,我的选择是:

    interface RequestInterface
    {
        /**
         * @returns string
         */
        public function getCommand();
    }
    
    class LoginRequest implements RequestInterface
    {
        public function getCommand() {
            return "loginuser";
        }
       ...
    }
    

    您可以随时检查一个字符串是否在稍后使用is_string()返回。 无论如何,没有什么可以阻止某人将COMMAND设置为数字。

    链接地址: http://www.djcxy.com/p/83763.html

    上一篇: Force a class implementing the interface to define a constant

    下一篇: Groovy CompileStatic on Android messes up Groovy Truth