[英]What's the point of E_ALL | E_STRICT if it's the same value as E_ALL?
E_ALL
等於8191( 0001 1111 1111 1111
) E_STRICT
等於2048( 0000 1000 0000 0000
) 使用按位OR組合它們:
1 1111 1111 1111
1000 0000 0000
我們得到的值完全相同的原始E_ALL
:
1 1111 1111 1111
如果我們可以簡單地執行error_reporting(E_ALL)
來獲取相同的東西,那么做error_reporting(E_ALL | E_STRICT)
有什么意義呢?
你要:
error_reporting(E_ALL | E_STRICT);
E_ALL
不包含E_STRICT
(除非您使用的是PHP 5.4+)。 你的價值觀不正確。 從預定義常量 E_ALL
定義為:
支持的所有錯誤和警告,除了PHP 5.4之前的
E_STRICT
級別。在PHP 5.4.x中為32767,在PHP 5.3.x中為30719,在PHP 5.2.x中為6143,之前為2047
1 | 1 = 1
最簡單的答案是,目前沒有理由將這兩者與按位或操作結合起來,但如果他們決定在將來改變這些常量,那么可能會有。
編輯:你似乎已經為這些常量拉錯了值,使整個問題沒有實際意義。
來自php.net:
傳遞值-1將顯示每個可能的錯誤,即使在將來的PHP版本中添加了新的級別和常量時也是如此。 從PHP 5.4開始,E_ALL常量也表現為這種方式。
問題中提供的位值通常不是錯誤的,但僅適用於5.4以上的PHP版本。
E_ALL
包含E_STRICT
因此您應該使用: error_reporting(E_ALL);
Binary Name Decimal
0001 1111 1111 1111 E_ALL 32767
0000 1000 0000 0000 E_STRICT 2048
----------------------------------------------------------------------
0001 1111 1111 1111 E_ALL | E_STRICT produces the same result as E_ALL
E_ALL
不包含E_STRICT
因此您應該使用: error_reporting(E_ALL | E_STRICT);
Binary Name Decimal
0111 0111 1111 1111 E_ALL 30719
0000 1000 0000 0000 E_STRICT 2048
----------------------------------------------------------------------
0111 1111 1111 1111 E_ALL | E_STRICT produces a different value than E_ALL
E_ALL
不包含E_STRICT
因此您應該使用: error_reporting(E_ALL | E_STRICT);
但是比特值與PHP 5.3中的值不同。
E_STRICT
不存在,因此您必須使用: error_reporting(E_ALL);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.