PHP 整数配置(例如 1=apache,2=php,3=apache+php)

发布于 2024-09-10 07:53:43 字数 166 浏览 3 评论 0原文

如何使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

终止放荡 2024-09-17 07:53:43

您不只是有一个总和,您还有一组标志或一个位字段,每个标志由一位表示。

$logging     = !!($cfgval & 1);
$errorReport = !!($cfgval & 2);
$emailReport = !!($cfgval & 4);

这 ”!!”只是确保非 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.

$logging     = !!($cfgval & 1);
$errorReport = !!($cfgval & 2);
$emailReport = !!($cfgval & 4);

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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文