加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 17:53:03 所属栏目:PHP教程 来源:网络整理
导读:我愿意强制我的类定义一个名为COMMAND的常量.如果php允许覆盖接口中的常量,就会看起来像 class RequestInterface{ const COMMAND = "no-command-specified";}class LoginRequest implements RequestInterface{ const COMMAND = "loginuser"; public $usernam
我愿意强制我的类定义一个名为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定义了一个getCommand方法,我的请求类需要实现它并将命令名作为字符串返回.但是每个请求的代码太多了
>用抽象类替换接口.它看起来很奇怪,因为通常期望抽象类定义至少一个方法
>接口变为抽象类,并定义受保护的变量$command.它还有一个getter方法,返回$this->命令;. Children覆盖protected property $命令.我不喜欢将公共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设置为数字.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读