Использование битовой маски обратного отслеживания отладки PHP


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

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

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

Должен ли я использовать оба варианта, как в

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, DEBUG_BACKTRACE_IGNORE_ARGS)

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

Author: hakre, 2012-06-30

3 answers

Это означает, что вы объединяете параметры с побитовым оператором ИЛИ: |.

Например:

 debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS);

Для получения более подробной информации о битовых масках: http://en.wikipedia.org/wiki/Mask_ (вычислительный)

 8
Author: Amber, 2012-06-30 19:10:37

Имейте в виду, что эти 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.

 13
Author: staabm, 2013-05-22 10:21:55

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

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

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

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);
 10
Author: Cameron Martin, 2012-07-01 10:48:24