数据库中经常会使用tinyint 的字段如:
status : -1删除;0禁用;1启用;
schooleType : 1小学;2中学;3高中;4大学;等
为了避免在 控制器,模型,视图中大量出现硬编码情况。要使用常量来代替 1,2,3这样数值;
代码如下;
namespace common\enums;
use Yii;
trait Enum
{
public static function getText($int) :string
{
return isset(self::getListExplain()[$int]) ? self::getListExplain()[$int] : '';
}
public static function getInt($name) :int
{
$nameArr = array_flip(self::getListExplain());
return isset($nameArr[$name]) ? $nameArr[$name] : 0; //对应数据库默认值
}
}
-------------------------------------------------------------------
namespace common\enums;
use Yii;
class ApplyDegreeTypeEnum
{
use Enum;
const BACHELOR = 1;
const MASTER = 2;
const DOCTOR = 3;
public static function getListExplain(){
return [
self::BACHELOR => Yii::t('common/enum', '本科'),
self::MASTER => Yii::t('common/enum', '硕士'),
self::DOCTOR => Yii::t('common/enum', '博士'),
];
}
}
分析:一开始使用的是 父类继承结果总是 无法使用子类 的 东西;使用trait 则可以 调用static 函数来使用。
原则:最好要通过函数来使用 类的属性(特别是数组)这样可以把对 特殊情况(非空,不存在的)情况进行判断处理,外部调用者就不用再考虑那些个情况了。
对 数值 的 文本展示 支持 多语言版本。关键是使用 Yii::t()