Vla*_*ban 7 php oop inheritance interface
我愿意强制我的类定义一个名为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";
Run Code Online (Sandbox Code Playgroud)
显然这不起作用.我正在寻找一种干净的方式来让我的请求定义COMMAND cosntant.
我一直在考虑以下选项:
接口变为抽象类,并定义受保护的变量$ command.它还有一个返回$ this-> command;的getter方法.Children覆盖protected property $命令.我不喜欢将公共VARIABLES(应该是可变的)与受保护的VARIABLE混合的方式,这种VARIABLE实际上不应该是可修改的,因此不应该首先假设它是一个变量.
class LoginRequest extends BaseRequest
{
protected $command = "loginuser";
public $username;
public $password;
}
Run Code Online (Sandbox Code Playgroud)实现这一目标的最简洁方法是什么?
就个人而言,我的选择是:
interface RequestInterface
{
/**
* @returns string
*/
public function getCommand();
}
class LoginRequest implements RequestInterface
{
public function getCommand() {
return "loginuser";
}
...
}
Run Code Online (Sandbox Code Playgroud)
您可以随时检查是否返回了一个字符串is_string().无论如何都没有什么可以阻止某人将COMMAND设置为数字.