Zenphotoのプラグインから次のコードを理解したいと思います。
$plugin_is_filter = 5|ADMIN_PLUGIN|THEME_PLUGIN;
スニペットはコンテキストから切り離されました。それはまさにその背後にあるアイデアについてです。
5|ADMIN_PLUGIN|THEME_PLUGIN
パーミッションはビット単位で使用されていますか?
いつ使うと便利ですか?
ヒント、リンクをありがとう。
Zenphotoのプラグインから次のコードを理解したいと思います。
$plugin_is_filter = 5|ADMIN_PLUGIN|THEME_PLUGIN;
スニペットはコンテキストから切り離されました。それはまさにその背後にあるアイデアについてです。
5|ADMIN_PLUGIN|THEME_PLUGIN
パーミッションはビット単位で使用されていますか?
いつ使うと便利ですか?
ヒント、リンクをありがとう。
はい、それはビット単位のORの例です。
複数のブールフラグを単一の整数にパックすることに関心がある場合は、通常、ビット演算を使用します。ビット単位の演算子を使用すると、バイトの個々のビットを操作できます。つまり、8ビットバイトを使用して、8つの異なるブール値を格納できます。これは、8ビットバイト全体を使用して単一のバイナリ「yes」または「no」を格納する場合に役立つ手法であり、無駄であると見なされていました。
今日、PHPでこの種のビットパッキングを(特にそのようなマジックナンバー5
を使用して)単純な構成配列よりも使用することを好む理由は事実上ありません。これは、PHPコードに実質的に何の価値も追加せず、複雑さを増し、保守性を低下させて、実質的な利益をもたらさない手法です。このようにビット単位のフラグを使用する新しいPHPコードが作成されることには非常に懐疑的です。
ビットフィールドは、1つの変数にブールオプションのセットを提供する必要がある場合に役立ちます。たとえば、PHPでは、エラーレポートを次のように設定できます。
error_reporting(E_ERROR | E_WARNING | E_PARSE);
バイナリでは、これらの定数の値は次のとおりです。
E_ERROR 0001
E_WARNING 0010
E_PARSE 0100
または、そのようなオプションのセットを一緒に使用すると、1つのフィールドで設定を表現できます。
E_ERROR | E_WARNING | E_PARSE 0111
次に、ANDを使用して設定されているオプションを確認できます。
if ($option & E_ERROR === E_ERROR) {
// E_ERROR is set, do something
}
変数$plugin_is_filterは、ロードするプラグインにフラグを立てるために使用されています。基本的に、列挙されたセットプラグインに対応する配列ビットのように扱われます。詳細については、以下のリンクを参照してください。
これは、ADMIN_PLUGINとTHEME_PLUGINが何であるかを説明しています。
この変数の使用方法の簡単な説明を取得するには、ページで「$plugin_is_filter」を検索してください。
http://www.zenphoto.org/news/zenphoto-plugin-architecture
これがお役に立てば幸いです。