php - 状态 - 使用哪种数据类型?
问题描述
我目前正在查看我生成的代码,并试图提高其可读性和质量。这是我如何处理一个简单问题的示例,我一直认为这是一个糟糕的解决方案。
具有以下“状态”的用户表,或此示例中的海拔级别
- 员工
- 导师
- 行政
(这些可以是任何东西,例如,一个项目可能具有“未完成”、“搁置”和“完成”状态)
过去,我总是将其存储为 INT 值,然后在打印出帐户及其状态时,我将编写一个函数将其转换回文本,以打印在页面上,例如
if userLevel === 3 { return "Admin"; };
这一直感觉是一个糟糕的解决方案,而且它不是很灵活。添加任何新类型的帐户都需要更新该功能。这种格式也使得阅读页面限制变得非常困难。
如果我要添加该行:
if userLevel !== 2 OR 3 { // Redirect to error page };
您可以看到这会如何变得令人困惑。
最近我开始将这些“状态”纯粹存储为一个字符串,这样它更具可读性。但是现在我对 Laravel 有了更多的了解,我想知道我是否应该有额外的数据库表专门用于这个。
所以我的问题 - 这种数据的合适数据类型是什么,与之交互的理想方式是什么?
解决方案
这可能适合也可能不适合您的特定应用程序,但我经常发现按位运算便于0 or more
在单个整数中包含属性。
例如,假设您分配了以下内容:
$admin = 0b1; //(1)
$employee = 0b10; //(2)
$supervisor = 0b100; //(4)
现在您要为其分配一个整数值,$status
它是适当值的按位or
。
所以,主管是两者employee
,supervisor
所以他们将有一个整数值
2|4 = 0b010 | 0b100 = 0b110 = 6
.
现在,当您想查看用户是否有status
时,只需屏蔽以下内容:
if(($statusInt & $supervisor) != 0){
// it is a supervisor... //maybe more, at least supervisor
}
您当然可以通过statuses
这种方式在单个整数或 INT 数据库列中包含更多内容。
推荐阅读
- google-apps-script - Google App Script 更新另一个工作表中的单元格值
- objective-c - NSViewController 窗口未调整大小且未关闭
- jsf - 如何使用 Netbeans 和 Primefaces 在 JSF 应用程序中创建一个空页面?
- php - php中的password_verify登录问题
- python - 如何使用 Homebrew 升级到特定的 Python 版本?
- linux - 为什么 Ubuntu 安装带有破坏 autoconf 的版本后缀的 ARM64 编译器?
- prolog - Problog 中的互斥性
- node.js - RangeError:超出最大调用堆栈大小。谁能帮我?
- vba - 使用 Document.Paragraphs.Add() 创建多个 Word 段落
- asp.net - 从 3.5 升级到 4.0,asp 菜单悬停在不工作