Ví dụ:Toán tử ~ này có ý nghĩa gì ở đây?
set_error_handler(array($this, 'handleError'), E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE);
điều đó có nghĩa là gì?
Ví dụ:Toán tử ~ này có ý nghĩa gì ở đây?
set_error_handler(array($this, 'handleError'), E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE);
điều đó có nghĩa là gì?
Đây là bitwise not operator (còn được gọi là "bổ sung"). Đó là các bit được đặt trong ~ $a
là các bit không được đặt trong $a
.
Vì vậy, sau đó
E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE
là các bit đặt trong E_ALL
và những người không được thiết lập trong E_STRICT
, E_WARNING
và E_NOTICE
. Điều này về cơ bản nói tất cả các lỗi ngoại trừ các lỗi nghiêm ngặt, cảnh báo và thông báo.
Đó là bitwise-not operator. Ví dụ: sự phủ định bitwise của một số có biểu diễn nhị phân 01011110
sẽ là 10100001
; mỗi bit được lật ngược lại.
Xem Bitwise Operators: đó là "không phải là" nhà điều hành (trích dẫn):
~ $a
Bits được đặt trong$a
được không được thiết lập, và ngược lại.
Có nghĩa là, lấy một ví dụ lấy cảm hứng từ những gì bạn đăng, mà phần mã này:
var_dump(decbin(E_STRICT));
var_dump(decbin(~E_STRICT));
sẽ giúp bạn có được kết quả này:
string '100000000000' (length=12)
string '11111111111111111111011111111111' (length=32)
(Add a cặp số 0
cho phần đệm ở bên trái của dòng đầu tiên và bạn sẽ thấy ý tôi là gì)
Loại bỏ các đệm khỏi đầu ra thứ hai, bạn sẽ có được:
100000000000
011111111111
Có nghĩa là các nhà điều hành ~
đã đưa ra một chút 0
cho mỗi bit tương đương với 1
trong intput - và ngược lại ,
Đây là nhà điều hành not
bitwise. Đọc về toán tử Bitwise đây:
Sự khác biệt giữa Bitwise (&, |, ~) và phi Bitwise (& &, ||,!) Khai thác được Bitwise được áp dụng trên tất cả các bit trong số nguyên, trong khi không bitwise xử lý một số nguyên như là một giá trị "true" (không khác) hoặc "false" (zero).
Nói, $flag_1 = 00000001
và $flag_2 = 00000010
.Cả hai sẽ là "true" cho các hoạt động không bitwise, ($flag_1 && $flag_2
là "true"), trong khi kết quả của $flag_1 & $flag_2
sẽ là 00000000 và kết quả của $flag_1 | $flag_2
sẽ là 00000011. ~$flag_2
sẽ là 11111101, khi bitwise AND ANDed to running kết quả sẽ xóa vị trí bit đó (xxxxxx0x). $flag_2
bitwise-ORED cho kết quả đang chạy sẽ đặt vị trí bit đó (xxxxxx1x).
Mặc dù đó là giải thích kỹ thuật, giải thích đó không hữu ích trừ khi bạn nhận ra rằng 'E_STRICT',' E_WARNING', 'E_NOTICE' et. al. là số nguyên và đồng thời được kết hợp với toán tử '&' bitwise. – IQAndreas