На данный момент у меня есть пользовательская сущность с предопределенными статусами в качестве констант. У пользователя есть STATUS_NOT_CONFIRMED по умолчанию.
interface UserInterface
{
const STATUS_ENABLED = 1;
const STATUS_DISABLED = 2;
const STATUS_BANNED = 3;
const STATUS_NOT_CONFIRMED = 4;
}
Но я застрял с вопросом какой лучший (или лучший) способ управления статусами пользователей:
используя только один метод, такой как $ user-> changeStatusTo ($ status), который похож на $ user-> setStatus ($ status);
создайте методы, такие как $ user-> enable (), $ user-> disable (), $ user-> ban (), что более красноречиво, но может привести к проблеме, если в будущем у меня будет больше статусов;
Буду рад любым ответам и советам, спасибо!
Я бы создал оба варианта и позволил бы им звонить друг другу. Так зовет ban
назвал бы setStatus
, Если вы позже добавите новые статусы, вы можете расширить setStatus и, если действительно необходимо, добавить новый метод.
По соображениям удобства я бы также продлил UserInterface
интерфейс для сохранения Максимум значение. Таким образом, вы можете изменить интерфейс, не касаясь setStatus
метод.
interface UserInterface
{
const STATUS_ENABLED = 1;
const STATUS_DISABLED = 2;
const STATUS_BANNED = 3;
const STATUS_NOT_CONFIRMED = 4;
const STATUS_MAX = self::STATUS_NOT_CONFIRMED;
}
class User implements UserInterface {
// ...
function setStatus($status) {
if ($status < 0 || $status > UserInterface::STATUS_MAX) {
throw InvalidArgumentException('status');
}
$this->status = $status;
}
function ban() {
$this->setStatus(UserInterface::STATUS_BAN);
}
// ...
}
Я могу предложить использовать магический метод __get () с userInterface и динамически проверять константу ниже.
<?php
interface UserInterface
{
const STATUS_ENABLE = 1;
const STATUS_DISABLE = 2;
const STATUS_BAN = 3;
const STATUS_NOT_CONFIRM = 4;
const STATUS_DEFAULT = self::STATUS_NOT_CONFIRM;
}
class User implements UserInterface{
public $status = UserInterface::STATUS_DEFAULT;
private function setStatus($status) {
if ($status < 0 || $status > UserInterface::STATUS_DEFAULT) {
throw InvalidArgumentException('status');
}
$this->status = $status;
}
public function getStatus() {
return $this->status;
}
function __call($fn_name,$args)
{
if(strpos($fn_name,'make')==0)
{
$statusChangeTo = "STATUS_".strtoupper(substr($fn_name,4));
$constant= 'UserInterface::'.$statusChangeTo;
if(defined($constant))
{
$this->setStatus(constant($constant));
}
else
{
throw new Exception("Invalid method ".$fn_name);
}
}
else
{
throw new Exception("Invalid method ".$fn_name);
}
}
}
$user= new User();
var_dump($user->getStatus());
$user->makeBan();
var_dump($user->getStatus());
?>