话说php的预定义变量 (只考虑 PHP7情况吧)
E_ALL 是 30719 (111011111111111) 15个错误提示位,
E_STRICT 是 000100000000000 用于补第4位的错误提示
E_NOTICE 是 8 (000000000001000)
E_ALL | E_STRICT ^ E_NOTICE 可以表示为
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 E_ALL | E_STRICT
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 E_NOTICE
结果是 111111111110111
E_ALL | E_STRICT & ~E_NOTICE 可以表示为
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 E_ALL | E_STRICT
1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 ~E_NOTICE
结果是 111111111110111
从而可以理解为什么 有两种写法
error_reporting(E_ALL | E_STRICT ^ E_NOTICE);
error_reporting(E_ALL | E_STRICT & ~E_NOTICE);