How about this? Unlike the examples below, it will show all the bits that are set, AND handle any bits defined in the future (at least not silently hide them)...
$strErrorType = "";
$bit = 1;
$tmpErrNo = $errNo;
while ($tmpErrNo) {
if ($tmpErrNo & $bit) {
if ($strErrorType != "")
$strErrorType .= " | ";
switch ($bit) {
case E_USER_WARNING:
$strErrorType .= "E_USER_WARNING"; break;
case E_USER_NOTICE:
$strErrorType .= "E_USER_NOTICE"; break;
case E_WARNING:
$strErrorType .= "E_WARNING"; break;
case E_CORE_WARNING:
$strErrorType .= "E_CORE_WARNING"; break;
case E_COMPILE_WARNING:
$strErrorType .= "E_COMPILE_WARNING"; break;
case E_NOTICE:
$strErrorType .= "E_NOTICE"; break;
case E_ERROR:
$strErrorType .= "E_ERROR"; break;
case E_PARSE:
$strErrorType .= "E_PARSE"; break;
case E_CORE_ERROR:
$strErrorType .= "E_CORE_ERROR"; break;
case E_COMPILE_ERROR:
$strErrorType .= "E_COMPILE_ERROR"; break;
case E_USER_ERROR:
$strErrorType .= "E_USER_ERROR"; break;
default:
$strErrorType .= "(unknown error bit $bit)"; break;
}
}
$tmpErrNo &= ~$bit;
$bit <<= 1;
}