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

Пример:

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

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

5 ответов

Решение

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

Итак, тогда

E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE

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

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

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

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

Это not побитовый оператор. Читайте о побитовых операторах здесь:

http://php.net/manual/en/language.operators.bitwise.php

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

~ $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 в интуту - и наоборот,

Другие вопросы по тегам