2012-06-30 11 views
14

Tratando de entender esta entrada en el manual php en debug_backtrace.PHP debug_backtrace uso de máscara de bits

No entiendo lo que quieren decir con "este parámetro es una máscara de bits para ...."

He hecho búsquedas en la web de máscaras de bits y mi cabeza da vueltas alrededor así que he decidido no lo hago Realmente quiero aprender los detalles al respecto, pero solo para saber cómo puedo suponer agregar las opciones a esa función.

lo pongo en ambas opciones como en

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, DEBUG_BACKTRACE_IGNORE_ARGS) 

si quiero tanto y uno de ellos si sólo quiero que uno?

Respuesta

10

Las constantes tendrán valores de 2^n en decimal, o (10)^n en binario. Por ejemplo: 1, 10, 100, 1000, etc. (en binario).

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

Usted puede hacer a nivel de bits o sobre, por ejemplo, a y b. Esto significa que cada bit se 'encenderá' si el mismo bit en aob está 'encendido'.

a | b == 011 

Esto es una máscara de bits. La máscara de bits está marcada por la inclusión de a por

bitmask & a != 0 

Cuál es

011 & 001 == 001 != 0 

Sin embargo, debido a que C no está en la máscara de bits:

bitmask & c == 011 & 100 == 0 

Por lo tanto, para incluir tanto a como b en la máscara de bits, utiliza el operador binario o.

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS); 
+0

+1, amo la forma en que explicaste esto – Wh1T3h4Ck5

+0

Sí ... muy claro. Aceptado el anterior porque fue el primero, pero voté esto en agradecimiento. Una pequeña pregunta de seguimiento es si es posible cargar la máscara de bits en una variable php '$ x = a | b; 'o no. – Dayo

+1

Sí, lo es, una máscara de bits es simplemente un número entero, por lo que se puede utilizar de la misma manera que cualquier otra expresión. –

11

Tenga en cuenta que esas constantes (2 DEBUG_BACKTRACE_PROVIDE_OBJECT, DEBUG_BACKTRACE_IGNORE_ARGS) son diferentes en su significado. Mientras DEBUG_BACKTRACE_PROVIDE_OBJECT proporciona un objeto adicional cuando está presente, DEBUG_BACKTRACE_IGNORE_ARGS elimina los argumentos cuando están presentes.

Dado que el caso de uso más común para estas constantes es reducir el uso de memoria, el camino con menos memoria de consumo es:

debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); 

NO

// false friend! 
debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS); 

Se sustituye el valor predeterminado de DEBUG_BACKTRACE_PROVIDE_OBJECT y además ignora DEBUG_BACKTRACE_IGNORE_ARGS.

+0

Exactamente como lo quería explicado. –

Cuestiones relacionadas