Использование битовой маски PHP debug_backtrace

Попытка понять эту запись в руководстве по php на debug_backtrace.

Я не понимаю, что они подразумевают под "этот параметр является битовой маской для...."

Я выполнил поиск в Интернете на битмасках, и моя голова крутится вокруг, поэтому я решил, что я действительно не хочу изучать детали об этом, но просто знаю, как я могу добавить варианты этой функции.

Включаю ли я оба параметра, как в

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, DEBUG_BACKTRACE_IGNORE_ARGS)

если я хочу оба и один из них, если я хочу только этого?

Ответы

Ответ 1

Это означает, что вы комбинируете опции с побитовым оператором OR: |.

Например:

 debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS);

Подробнее о битмаксах: http://en.wikipedia.org/wiki/Mask_(computing)

Ответ 2

Константы будут иметь значения 2 ^ n в десятичной форме, или (10) ^ n в двоичном формате. Например, 1, 10, 100, 1000 и т.д. (В двоичном формате).

Скажите a=001, b=010, c=100:

Вы можете выполнять побитовое соединение, например, a и b. Это будет означать, что каждый бит будет "включен", если один и тот же бит в или b равен 'on'.

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);

Ответ 3

Помните, что эти 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.