PHP debug_backtrace位掩码用法

Day*_*ayo 16 php bit-manipulation bitmask stack-trace

试着在php手册中理解这个条目debug_backtrace.

我不明白他们的意思是"这个参数是......的位掩码"

我已经在bitmasks上进行了网页搜索,我的脑袋在旋转,所以我决定不想了解它的细节,只是知道我应该如何为这个功能添加选项.

我是否同时选择了两个选项

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, DEBUG_BACKTRACE_IGNORE_ARGS)
Run Code Online (Sandbox Code Playgroud)

如果我想要这两个,如果我只想要那一个?

sta*_*abm 14

请注意,这两个常量(DEBUG_BACKTRACE_PROVIDE_OBJECT,DEBUG_BACKTRACE_IGNORE_ARGS)的含义不同.虽然DEBUG_BACKTRACE_PROVIDE_OBJECT在存在时提供了另一个对象,但DEBUG_BACKTRACE_IGNORE_ARGS会在存在时删除args.

由于这些常量最常见的用例是减少内存使用量,因此内存消耗最少的方法是:

debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
Run Code Online (Sandbox Code Playgroud)

// false friend!
debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS);
Run Code Online (Sandbox Code Playgroud)

它会覆盖默认的DEBUG_BACKTRACE_PROVIDE_OBJECT,并且还会忽略DEBUG_BACKTRACE_IGNORE_ARGS.


Cam*_*tin 13

常量的十进制值为2 ^ n,或二进制的(10)^ n.例如 - 1,10,100,1000等(二进制).

a=001, b=010, c=100:

你可以按位或依次执行,例如,ab.这意味着如果a或b中的相同位为"on",则每个位都将"打开".

a | b == 011
Run Code Online (Sandbox Code Playgroud)

这是一个位掩码.该位掩码检查列入a

bitmask & a != 0
Run Code Online (Sandbox Code Playgroud)

这是

011 & 001 == 001 != 0
Run Code Online (Sandbox Code Playgroud)

但是,因为c不在位掩码中:

bitmask & c == 011 & 100 == 0
Run Code Online (Sandbox Code Playgroud)

因此,要在位掩码中包含a和b,可以使用二进制或运算符.

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS);
Run Code Online (Sandbox Code Playgroud)


Amb*_*ber 10

这意味着您将选项与按位OR运算符组合:|.

例如:

 debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS);
Run Code Online (Sandbox Code Playgroud)

有关位掩码的更多详细信息:http://en.wikipedia.org/wiki/Mask_ ( computing )