2011-10-31 26 views
0

錯誤,這是一個愚蠢的問題,但我似乎無法環繞完成與此相關的位掩碼測試我的頭:功能觸發基於報告水平PHP

鑑於我創建了一堆廣義函數來擴展PHP的函數庫:

/** 
* 
* @param string $path 
* @return array 
*/ 
function load_array($path){ 
    $path = path_file($path); 
    if(null === $path){ 
     // trigger error when appropriate 
     return array(); 
    } 
    return ((Array) require($path)); 
} 

path_file()是在庫的另一個功能,只是假設它是realpath()

我」什麼根據當前運行環境的報告級別觸發錯誤。由於這將是一個通知,我應該只是測試:

if(error_reporting() <= E_USER_NOTICE){ /***/ } 

這看起來不正確。

+1

它的工作原理相反。您只需生成通知,並且在該級別被禁用時,錯誤處理程序會忽略它。或者你爲什麼想要這樣對待它? – mario

+0

Thanks @mario - 我總是走長(*閱讀,錯誤*)的方式。你當然是對的,因爲我顯然不想這樣對待它,但是確實如此。 – Dan

回答

1
if (error_reporting() & E_USER_NOTICE) { 
    ... 
} 

只有在E_USER_NOTICE標誌已在error_reporting中啓用時,纔會觸發,使用按位AND操作。

如果你假裝的error_reporting標誌是隻有8位,USER_NOTICE標誌是在第4位,那麼你正在做的:

00001000 <--- e_user_notice 
    10101111 <--- some fake error_reporting bitmask 
& -------- 
    00001000 <-- e_user_notice is enabled. It's non-zero, so evaluates to 'true' in PHP. 
+0

Thanks @Marc B - 這就是我正在研究的方向:)在這裏只是簡單的'E_NOTICE';我沒有想到'trigger_error()'會拋出'E_USER_ *' – Dan