0

我想从 Zenphoto 的插件中理解以下代码:

$plugin_is_filter = 5|ADMIN_PLUGIN|THEME_PLUGIN;

该片段与上下文脱节。这只是它背后的想法。

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

什么时候有用?

感谢您的任何提示,链接。

4

3 回答 3

1

是的,这是按位 OR的一个例子。

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

今天,几乎没有理由更喜欢在 PHP 中使用这种位打包(尤其是像这样的幻数5)而不是简单的配置数组。这种技术几乎没有为 PHP 代码增加任何价值,增加了复杂性并降低了可维护性而没有真正的收益。我会非常怀疑任何以这种方式使用位标志的新 PHP 代码。

于 2012-08-20T17:13:32.963 回答
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
}
于 2012-08-20T17:15:28.877 回答
0

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

这解释了ADMIN_PLUGIN 和 THEME_PLUGIN 是什么。

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

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

我希望这有帮助。

于 2012-08-20T17:27:07.580 回答