实际项目过程,经常遇到一些键值组成的常量表,今天想了一下怎么用比较好的方式实现这种结构。
-
一个想法是建一个常量表,通过数据库来管理常量,这个实现比较直接,就不展开了。
-
另一个想法是把这种结构用类来表示。
abstract class Constants{
static $map = [];
public static function getKey($value){
return !empty($key = array_search($value, static::$map)) ? $key : null;
}
public static function getValue($key){
return isset(static::$map[$key])? static::$map[$key] : null;
}
public static function getMap(){
return static::$map;
}
}
class Phone extends Constants{
static $map = [
10086 => '移动',
10000 => '电信'
];
}
echo Phone::getValue(10000), PHP_EOL;
echo Phone::getKey('电信'), PHP_EOL;
这里本来Constants 这个类本来打算设置一个$map的abstract的属性,但是却报错了,属性不支持定义为abstract。
然后一顿搜索,找到了一个替代方案
abstract class Foo_Abstract {
abstract public function get_tablename();
}
class Foo extends Foo_Abstract {
protected $tablename = 'tablename';
public function get_tablename() {
return $this->tablename;
}
}
不过这样代码会多很多,所以感觉用上面的实现也足够了吧。
还行