2011-10-31 22 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