簡體   English   中英

E_ALL的重點是什么? E_STRICT如果它與E_ALL的值相同?

[英]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版本。

PHP 5.4+

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

PHP 5.3

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

PHP 5.0至5.2

E_ALL不包含E_STRICT因此您應該使用: error_reporting(E_ALL | E_STRICT); 但是比特值與PHP 5.3中的值不同。

PHP之前5.0

E_STRICT不存在,因此您必須使用: error_reporting(E_ALL);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM