нет такого оператора "два восклицательных знака". есть "пайп" - | - "бинарное или" и "двойной пайп" || - "логическое или". 1 | 4 = 5 потому что 001 | 100 = 101, 2 | 7 = 7 потому что 010 | 111 = 111. 1 || 2 = истина потому что и 1 и 2 логически истинны. 0 || 1 = истина потому что "либо ноль либо единица" ноль логически ложен но единица логически истинна поэтому результатом будет истина. примерно понятно?
! - логическое НЕ. !! - отрицание отрицания, дает исходное значение. с той лишь разницей, что значение интерпретируется как логическое (булево). то есть !!$a это просто способ принудительного преобразования типа к булевому. то же самое, что (bool)$a P.S. site:stackoverflow.com double negation