2017-02-21 68 views
0

這可能聽起來像一個愚蠢的問題,但有一些我不明白關於error_reporting,我無法找到關於php.net或在谷歌研究後的解釋。爲什麼你必須在error_reporting中執行二進制操作?

我的本地工作站的錯誤是這樣的:

的error_reporting(E_ALL - E_DEPRECATED - E_WARNING);

每個人在工作中別人是:

的error_reporting(E_ALL &〜E_DEPRECATED &〜E_WARNING);

我的問題是:爲什麼它會給出相同的結果?爲什麼你必須使用二元運算而不是簡單的減法運算?

預先感謝您。

+0

我有一種感覺的事實,他們在這種情況下,相當於只是偶然。如果這些是位標誌,我希望它使用'&'。 – Carcigenicate

+0

* binary *操作習慣用於* binary *標誌。另外,以供參考:嘗試比較'E_ALL - E_WARNING - E_WARNING'與'E_ALL&〜E_WARNING&〜E_WARNING' –

回答

0

因爲E_DEPRECATEDE_WARNING已完全不同的位集,並且你從E_ALL減去它們,所有位都被設置。

如果嘗試刪除相同位集或組合位集的兩倍,則會出現真正的差異。在這種情況下,您會多次刪除「位」,這會導致完全錯誤的值。

在一般情況下,你可能剛剛從錯誤標誌去掉一個選項,不知道,這位當前設置

$level = error_reporting(); 
// at this point, you simply can't use simple math, as you don't know, if the given error reporting option is set or not 
$level = $level & ~E_WARNING; 
error_reporting($level); 
相關問題