2012-06-30 105 views
14

試圖瞭解在debug_backtrace的PHP手冊中的這個條目。PHP debug_backtrace位掩碼用法

我不明白他們的意思是「這個參數是....位掩碼」

我已經在做位掩碼網絡搜索,我的頭轉來轉去,所以我決定我不要真的很想了解它的細節,但只是想知道我應該如何將選項添加到該功能。

難道我把在這兩個選項中

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, DEBUG_BACKTRACE_IGNORE_ARGS) 
如果我想都

,其中一人,如果我只想要一個?

回答

10

常數將具有2^n的小數,或(10)的值^ n的二進制。例如 - 1,10,100,1000等(二進制)。

a=001, b=010, c=100

你可以按位或上,例如,ab。這意味着如果a或b中的相同位爲'on',則每個位都將'打開'。

a | b == 011 

這是一個位掩碼。位掩碼是由

bitmask & a != 0 

這是

011 & 001 == 001 != 0 

但是檢查列入a,因爲C不在位掩碼:

bitmask & c == 011 & 100 == 0 

所以,既包括和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將刪除這些參數。

由於最常見的用例,這些常量是減少內存使用量,用最少的內存消耗的方法是:

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

我想如何解釋它。 –