基于注解的 PHP 枚举类实现
首先,先放一下项目仓库
Enum
之前在写项目的时候,通常一个错误码对应一条文案。这就导致我们写出了这种代码
<?php
class ErrorCode{
const ERROR=1000;
const PARAM_ERROR = 1001;
const MESSAGE=[
self::ERROR=>'系统错误',
self::PARAM_ERROR=>'参数错误',
];
}
随着我们的errorCode越来越多,就导致当我们拿到错误码时,我们很不容易找到他的错误信息。。而且每次新添加一个code,都要拖到最底下,添加一个message。感觉很不爽。
于是我们的ErrorCode又进行了一次升级。
<?php
class ErrorCode{
const ERROR=1000;
const ERROR_SHOW='系统错误';
const PARAM_ERROR = 1001;
const PARAM_ERROR_SHOW='参数错误';
public static function getMessage($code){
// 通过反射取出对应的SHOW
}
}
这种写法刚出来,就被否决了。。没有最丑,只有更丑的设计,另外,既然都用了反射,为什么我们不把错误信息放到他的注释里呢。
于是便有了这种新的设计,还是蛮有趣的。
<?php
use Xin\Phalcon\Enum\Enum;
class ErrorCode extends Enum
{
/**
* @Message('非法的TOKEN')
*/
public static $ENUM_INVALID_TOKEN = 700;
}
$code = ErrorCode::$ENUM_INVALID_TOKEN;
$message = ErrorCode::getMessage($code); // 非法的TOKEN
是不是很有趣,哈哈哈
PHP7.1以后就能反射拿到const的注释了,所以升级了一下常量组件
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: