2012-06-30 13 views
14

Cercando di comprendere questa voce nel manuale php su debug_backtrace.PHP debug_backtrace uso maschera di bit

Non capisco che cosa si intende con "questo parametro è una maschera di bit per ...."

Ho fatto ricerche web su bitmasks e mi gira la testa rotonda così ho deciso io no voglio davvero imparare i dettagli al riguardo ma solo per sapere come posso aggiungere le opzioni a quella funzione.

metto in entrambe le opzioni come in

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, DEBUG_BACKTRACE_IGNORE_ARGS) 

se voglio entrambi e uno di loro se voglio solo quello?

risposta

8

Significa che si combinano le opzioni con l'operatore OR bit a bit: |.

Ad esempio:

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS); 

Per maggiori dettagli su bitmasks: http://en.wikipedia.org/wiki/Mask_(computing)

10

Le costanti avranno valori di 2^n in decimale, o (10)^n in binario. Ad esempio: 1, 10, 100, 1000, ecc. (In binario).

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

Si può fare bit per bit o, per esempio, a e b. Ciò significa che ogni bit verrà "attivato" se lo stesso bit in abo è "on".

a | b == 011 

Questa è una maschera di bit. La maschera di bit viene controllato per l'inserimento di a da

bitmask & a != 0 

Qual è

011 & 001 == 001 != 0 

Tuttavia, poiché c non è nella maschera di bit:

bitmask & c == 011 & 100 == 0 

Così, per includere sia a che b nella maschera di bit, si utilizza l'operatore o l'operatore.

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS); 
+0

+1, mi piace il modo in cui hai spiegato questo – Wh1T3h4Ck5

+0

Sì ... molto chiaro. Accettato il precedente perché è venuto prima, ma ha votato in segno di apprezzamento. Una piccola domanda di follow up è se è possibile caricare la maschera di bit in una variabile php '$ x = a | b; 'oppure no. – Dayo

+1

Sì, una maschera di bit è semplicemente un numero intero, quindi può essere utilizzata allo stesso modo di qualsiasi altra espressione. –

11

essere consapevoli del fatto che quei 2 costanti (DEBUG_BACKTRACE_PROVIDE_OBJECT, DEBUG_BACKTRACE_IGNORE_ARGS) sono diversi nel significato. Mentre DEBUG_BACKTRACE_PROVIDE_OBJECT fornisce un oggetto aggiuntivo quando presente, DEBUG_BACKTRACE_IGNORE_ARGS rimuove gli argomenti quando presenti.

Poiché il caso d'uso più comune per queste costanti è di ridurre l'uso della memoria, il modo con almeno memoria consumo è:

debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); 

NON

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

Si sostituisce il valore predefinito di DEBUG_BACKTRACE_PROVIDE_OBJECT e inoltre ignora DEBUG_BACKTRACE_IGNORE_ARGS.

+0

Proprio come volevo spiegarlo. –

Problemi correlati