2012-06-30 25 views
14

Cố gắng hiểu mục nhập này trong hướng dẫn sử dụng php trên debug_backtrace.PHP debug_backtrace bitmask usage

Tôi không hiểu ý nghĩa của chúng bằng cách "tham số này là một bitmask cho ...."

Tôi đã làm các tìm kiếm web trên bitmasks và đầu tôi đang quay tròn vì vậy tôi đã quyết định rằng tôi không thực sự muốn tìm hiểu chi tiết về nó nhưng chỉ để biết làm thế nào tôi có thể phải thêm các tùy chọn cho chức năng đó.

Tôi đưa cả hai lựa chọn như trong

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, DEBUG_BACKTRACE_IGNORE_ARGS) 

nếu tôi muốn cả hai và một trong số họ nếu tôi chỉ muốn một điều đó không?

Trả lời

8

Điều đó có nghĩa là bạn kết hợp các tùy chọn với toán tử OR bitwise: |.

Ví dụ:

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS); 

Để biết thêm chi tiết về bitmasks: http://en.wikipedia.org/wiki/Mask_(computing)

10

Các hằng số sẽ có giá trị của 2^n trong hệ thập phân, hoặc (10)^n trong hệ nhị phân. Ví dụ: 1, 10, 100, 1000, v.v ... (dạng nhị phân).

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

Bạn có thể làm Bitwise hoặc trên, ví dụ, ab. Điều này có nghĩa là mỗi bit sẽ được 'bật' nếu cùng một bit trong a hoặc b là 'bật'.

a | b == 011 

Đây là bitmap. Bitmask được kiểm tra cho sự bao gồm của a bởi

bitmask & a != 0 

Đó là

011 & 001 == 001 != 0 

Tuy nhiên, do c không có trong bitmask:

bitmask & c == 011 & 100 == 0 

Vì vậy, để bao gồm cả a và b trong bitmask, bạn sử dụng toán tử nhị phân hoặc.

debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS); 
+0

+1, yêu cách bạn giải thích điều này – Wh1T3h4Ck5

+0

Có ... rất rõ ràng. Chấp nhận trước đó bởi vì nó đến đầu tiên nhưng đã bỏ phiếu này trong sự đánh giá cao. Một câu hỏi nhỏ tiếp theo là liệu có thể tải bitmask vào một biến php '$ x = a | b; 'hay không. – Dayo

+1

Vâng, bitmap chỉ đơn thuần là một số nguyên, vì vậy nó có thể được sử dụng giống như bất kỳ biểu thức nào khác. –

11

Hãy lưu ý rằng 2 hằng số đó (DEBUG_BACKTRACE_PROVIDE_OBJECT, DEBUG_BACKTRACE_IGNORE_ARGS) có ý nghĩa khác nhau. Trong khi DEBUG_BACKTRACE_PROVIDE_OBJECT cung cấp một đối tượng bổ sung khi có mặt, DEBUG_BACKTRACE_IGNORE_ARGS loại bỏ các arg khi có mặt.

Kể từ khi use-case phổ biến nhất cho những hằng số là giảm sử dụng bộ nhớ, cách với ít nhất bộ nhớ tiêu thụ là:

debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); 

KHÔNG

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

Nó sẽ ghi đè mặc định của DEBUG_BACKTRACE_PROVIDE_OBJECT và bỏ qua thêm DEBUG_BACKTRACE_IGNORE_ARGS.

+0

Chỉ cần làm thế nào tôi muốn nó giải thích. –