Использование битовой маски обратного отслеживания отладки PHP
Пытаюсь понять эту запись в руководстве по php на debug_backtrace
.
Я не понимаю, что они подразумевают под "этот параметр является битовой маской для ...."
Я провел поиск в Интернете по битовым маскам, и у меня голова идет кругом, поэтому я решил, что на самом деле не хочу узнавать подробности об этом, а просто хочу знать, как я могу добавить опции к этой функции.
Должен ли я использовать оба варианта, как в
debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, DEBUG_BACKTRACE_IGNORE_ARGS)
Если я хочу обоих и одного из них, если я только хочу этот?
3 answers
Это означает, что вы объединяете параметры с побитовым оператором ИЛИ: |
.
Например:
debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS);
Для получения более подробной информации о битовых масках: http://en.wikipedia.org/wiki/Mask_ (вычислительный)
Имейте в виду, что эти 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^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);