按位运算符

时间:2012-08-20 17:11:45

标签: php operators bit-manipulation

我想了解Zenphoto插件的以下代码:

$plugin_is_filter = 5|ADMIN_PLUGIN|THEME_PLUGIN;

该片段与背景脱节。这只是背后的理念。

5|ADMIN_PLUGIN|THEME_PLUGIN权限是否按位使用?

什么时候使用有用?

感谢任何提示,链接。

3 个答案:

答案 0 :(得分:1)

是的,这是bitwise OR的一个例子。

当您有兴趣将多个布尔标志打包为单个整数时,通常使用按位运算。按位运算符允许您操作字节的各个位,这意味着8位字节可用于存储8个不同的布尔值。当使用整个8位字节存储单个二进制“是”或“否”被认为是浪费时,这是一种 有用的技术。

今天,几乎没有理由更喜欢在PHP中使用这种比特包(特别是5类似于{{1}})而不是简单的配置数组。这种技术几乎没有为PHP代码增加任何价值,增加了复杂性并降低了可维护性,从而无法实现真正​​的收益。我会对生成的任何新的PHP代码持怀疑态度,这些代码以这种方式使用按位标志。

答案 1 :(得分:1)

当您需要在一个变量中提供一组布尔选项时,位域很有用。例如,PHP允许您设置错误报告,如下所示:

error_reporting(E_ERROR | E_WARNING | E_PARSE);

在二进制文件中,这些常量具有以下值:

E_ERROR   0001
E_WARNING 0010
E_PARSE   0100

如果您将一组选项组合在一起,您将能够在一个字段中表达设置:

E_ERROR | E_WARNING | E_PARSE 0111

然后,您可以使用AND检查正在设置的选项:

if ($option & E_ERROR === E_ERROR) {
    // E_ERROR is set, do something
}

答案 2 :(得分:0)

变量$ plugin_is_filter用于标记要加载的插件。从本质上讲,它被视为对应于枚举集插件的数组位。有关更多信息,请参阅以下链接。

这解释了ADMIN_PLUGIN and THEME_PLUGIN are

在页面中搜索“$ plugin_is_filter”,以获得有关如何使用此变量的简要说明。

http://www.zenphoto.org/news/zenphoto-plugin-architecture

我希望这会有所帮助。