2012-06-30 6 views
14

debug_backtraceのphpマニュアルでこのエントリを理解しようとしています。PHP debug_backtraceビットマスクの使用

私はビットマスクでウェブ検索を行っている

「このパラメータがために....ビットマスクです」によって、彼らが何を意味するのか理解していないと、私の頭は私にはないので、私が決めたラウンド回っています実際にその詳細を学びたいだけでなく、その機能にオプションを追加する方法を知ることができます。私はそのいずれかをしたい場合、私は両方とそれらのいずれかをしたい場合、私は

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, DEBUG_BACKTRACE_IGNORE_ARGS) 

のように両方のオプションで

を入れますか?

答えて

8

これは、ビット単位のOR演算子:|とオプションを組み合わせることを意味します。例えば

:ビットマスクの詳細については

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS); 

http://en.wikipedia.org/wiki/Mask_(computing)

10

定数は小数点2^n個の値を有し、又は(10)^ nはバイナリであろう。たとえば、1,10,100,1000など(バイナリ形式)。

セイa=001, b=010, c=100

あなたはビット単位で行うかについて、例えば、abことができます。これは、aまたはbのいずれかの同じビットが「オン」である場合、各ビットが「オン」になることを意味する。

a | b == 011 

これはビットマスクです。

bitmask & c == 011 & 100 == 0 

だから、両方のAが含まれるとする:cはビットマスクではないため、ビットマスクは、しかし

011 & 001 == 001 != 0 

ある

bitmask & a != 0 

によってaの包含のためにチェックされていますbビットマスクでは、バイナリまたは演算子を使用します。

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS); 
+0

+1この説明の方法が大好きです – Wh1T3h4Ck5

+0

はい...非常に明確です。それが最初に来たので前のことを受け入れましたが、感謝の気持ちでこれを票決しました。少しのフォローアップの質問は、ビットマスクをPHP変数 '$ x = a |に読み込むことが可能かどうかです。 b;かどうか。 – Dayo

+1

ええ、ビットマスクは単なる整数なので、他の式と同じように使用できます。 –

11

これら2つの定数(DEBUG_BACKTRACE_PROVIDE_OBJECT、DEBUG_BACKTRACE_IGNORE_ARGSは)意味で異なっていることに注意してください。 DEBUG_BACKTRACE_PROVIDE_OBJECTは、存在する場合に追加のオブジェクトを提供しますが、DEBUG_BACKTRACE_IGNORE_ARGSは存在する場合にargsを削除します。これらの定数のための最も一般的なユースケースは、メモリ使用量を減らすことですので

、少なくともメモリ消費の方法は次のとおりです。

debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); 

ませ

// false friend! 
debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS); 

それはDEBUG_BACKTRACE_PROVIDE_OBJECTのデフォルトを上書きしますさらにDEBUG_BACKTRACE_IGNORE_ARGSを無視します。

+0

ちょうど私がそれを説明したかった。 –

関連する問題