强制一个 class 实现接口来定义一个常量

Force a class implementing the interface to define a constant

我愿意强迫我的 classes 定义一个名为 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 cosntant。

我一直在考虑以下选项:

实现此目的最干净的方法是什么?

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

interface RequestInterface
{
    /**
     * @returns string
     */
    public function getCommand();
}

class LoginRequest implements RequestInterface
{
    public function getCommand() {
        return "loginuser";
    }
   ...
}

您以后可以随时检查返回的字符串 is_string()。无论如何,没有什么可以阻止有人将 COMMAND 设置为数字。