PHP debug_backtrace 位掩码用法

2022-08-30 21:50:31

试图在debug_backtrace的php手册中理解这个条目。

我不明白他们所说的“这个参数是....”的位掩码是什么意思。

我已经在位掩码上进行了网络搜索,我的头正在旋转,所以我决定我真的不想学习有关它的细节,而只是为了知道如何将选项添加到该功能中。

我是否将两个选项都放入

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, DEBUG_BACKTRACE_IGNORE_ARGS)

如果我想要两个,如果我只想要那个,那么其中一个?


答案 1

请注意,这 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。


答案 2

这些常量在十进制中将具有 2^n 的值,在二进制中将具有 (10)^n 的值。例如 - 1,10,100,1000等(二进制)。

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

您可以按位或 on 执行,例如,和 。这意味着如果 a 或 b 中的相同位处于“打开”状态,则每个位都将被“打开”。ab

a | b == 011

这是一个位掩码。检查位掩码是否包含a

bitmask & a != 0

哪个是

011 & 001 == 001 != 0

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

bitmask & c == 011 & 100 == 0

因此,要在位掩码中同时包含 a 和 b,请使用二进制或运算符。

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS);

推荐