PHP 整数配置(例如 1=apache,2=php,3=apache+php)
如何使用 PHP 解析配置值,该值是一个数字和其他数字的总数。
一个例子是:
1->1。启用日志记录
2->已启用错误报告
4->电子邮件报告已启用
3 ->启用日志记录 + 错误
5->启用日志记录 + 电子邮件
How can I parse a configuration value with PHP which is a number and a total of other numbers.
One example of this is:
1 -> Logging Enabled
2 -> Error Reporting Enabled
4 -> E-Mail Reporting Enabled
3 -> Logging + Error Enabled
5 -> Logging + E-Mail Enabled
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您不只是有一个总和,您还有一组标志或一个位字段,每个标志由一位表示。
这 ”!!”只是确保非 0 的数字(即:设置了特定位的数字)最终与 PHP 其余部分使用的“true”值相同,所以类似于
($logging == true) 始终按预期工作。这不是必需的,但我强烈建议您以某种方式将该值转换为布尔值;
(bool)
也可以工作,即使它的字符数是原来的 3 倍。 :)只要将数字保留为 2 的幂(1、2、4、8、16、32...),就可以轻松地将其扩展到 31-32 个不同的标志(整数的大小为 32 位,但最上面的位是一个符号位,如果您不了解“补码”数学,那么它的行为会有点有趣)。
You don't just have a sum -- you have yourself a set of flags, or a bit field, with each flag represented by one bit.
The "!!" just ensures that numbers that aren't 0 (ie: numbers with the specific bit set) end up as the same "true" value that the rest of PHP uses, so stuff like
($logging == true)
always works as expected. It's not required, but i highly recommend you convert the value to a boolean somehow;(bool)
would work as well, even if it is 3 times as many characters. :)As long as you keep the numbers as powers of two (1, 2, 4, 8, 16, 32...), it's easy to extend this up to 31-32 different flags (integers are 32 bits in size, but the top bit is a sign bit which acts kinda funny if you don't know about "two's complement" math).