數據庫中經常會使用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()