Что здесь означает этот оператор?

Пример:

set_error_handler(array($this, 'handleError'), E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE);

что это означает?

Ответ 1

Это побитовое не оператор (также называемый дополнением). Это биты, установленные в ~ $a, это те, которые не установлены в $a.

Итак, тогда

E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE

- бит, установленный в E_ALL, и те, которые не установлены в E_STRICT, E_WARNING и E_NOTICE. Это в основном говорит о всех ошибках, кроме строгих предупреждений и предупреждений об ошибках.

Ответ 2

Это побитово-не оператор. Например, побитовое отрицание числа с двоичным представлением 01011110 будет 10100001; каждый бит перевернут в противоположную сторону.

Ответ 3

Различие между побитовыми (&, |, ~) и небитовыми (& &, ||,!) операторами состоит в том, что поразрядные применяются ко всем битам целого числа, тогда как небитовое отношение к целому числу как одно истинное (ненулевое) или "ложное" (нулевое) значение.

Скажите, $flag_1 = 00000001 и $flag_2 = 00000010. Оба будут "истинными" для небитовых операций, ($flag_1 && $flag_2 "true" ), а результат $flag_1 & $flag_2 будет 00000000, а результатом $flag_1 | $flag_2 будет 00000011. ~$flag_2 будет 11111101, который, когда побитовое-ANDed к текущему результату, очистит эту позицию бита (xxxxxx0x). $flag_2 bitwise-ORed для выполняемого результата установит эту позицию бита (xxxxxx1x).

Ответ 4

См. Побитовые операторы: оператор "не" (цитирование):

~ $aБиты, которые установлены в $a, равны не установлен, и наоборот.


Это означает, что на примере, вдохновленном тем, что вы опубликовали, эта часть кода:

var_dump(decbin(E_STRICT));
var_dump(decbin(~E_STRICT));

Вы получите этот результат:

string '100000000000' (length=12)
string '11111111111111111111011111111111' (length=32)

(добавьте пару 0 для заполнения слева от первой строки, и вы увидите, что я имею в виду)


Удаляя отступы со второго выхода, вы получаете:

100000000000
011111111111

Это означает, что оператор ~ дал бит 0 для каждого бита, который был равен 1 в intput - и наоборот,