-1 is also semantically meaningless as a bit field, and only works in 2s-complement numeric representations. On a 1s-complement system -1 would not set E_ERROR. On a sign-magnitude system -1 would set nothing at all! (see e.g. http://en.wikipedia.org/wiki/Ones%27_complement)
If you want to set all bits, ~0 is the correct way to do it.
But setting undefined bits could result in undefined behaviour and that means *absolutely anything* could happen :-)Претходно дефинирани константи
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Претходно дефинирани константи
Референца за `errorfunc.constants.php` со подобрена типографија и навигација.
Претходно дефинирани константи
Постојаните подолу се секогаш достапни како дел од основната PHP.
Следните константи (или соодветната нумеричка вредност или нивното симболично име) се користат како битна маска за да се специфицира кои грешки да се пријават. Можно е да се користи бинарни оператори за комбинирање на овие вредности или маскирање на одредени типови грешки.
Името на константите може да се користи во рамките на php.ini, наместо суровите нумерички вредности на кои тие одговараат. Сепак, само
|,
~,
^,
!,
&
операторите се разбрани во рамките на php.ini.
Не е можно да се користат симболичните имиња надвор од PHP. На пример, во httpd.conf мора да се користи пресметаната вредност на битна маска.
-
E_ERROR(int) -
Фатални грешки при извршување. Овие укажуваат на грешки од кои не може да се опорави, како што е проблем со распределбата на меморијата. Извршувањето на скриптата се прекинува.
Вредност на константата:
1 -
E_WARNING(int) -
Предупредувања при извршување (нефатални грешки). Извршувањето на скриптата не се прекинува.
Вредност на константата:
2 -
E_PARSE(int) -
Грешки при парсирање при компилација. Грешките при парсирање треба да се генерираат само од парсерот.
Вредност на константата:
4 -
E_NOTICE(int) -
Известувања при извршување. Укажуваат дека скриптата наишла на нешто што може да укажува на грешка, но исто така може да се случи и во нормалниот тек на извршување на скриптата.
Вредност на константата:
8 -
E_CORE_ERROR(int) -
Фатални грешки што се случуваат за време на почетното стартување на PHP. Ова е слично на
E_ERROR, освен што се генерира од основната PHP. Вредност на константата:16 -
E_CORE_WARNING(int) -
Предупредувања (нефатални грешки) што се случуваат за време на почетното стартување на PHP. Ова е слично на
E_WARNING, освен што се генерира од основната PHP. Вредност на константата:32 -
E_COMPILE_ERROR(int) -
Фатални грешки при компилација. Ова е слично на
E_ERROR, освен што се генерира од Zend Scripting Engine. Вредност на константата:64 -
E_COMPILE_WARNING(int) -
Предупредувања при компилација (нефатални грешки). Ова е слично на
E_WARNING, освен што се генерира од Zend Scripting Engine. Вредност на константата:128 -
E_DEPRECATED(int) -
Известувања за отфрлање при извршување. Овозможете го ова за да добивате предупредувања за код што нема да работи во идните верзии.
Вредност на константата:
8192 -
E_USER_ERROR(int) -
Порака за грешка генерирана од корисникот. Ова е како
E_ERROR, except it is generated in PHP code by using the PHP function trigger_error(). Вредност на константата:256Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваУпотребата на овој констант со trigger_error() е застарена од PHP 8.4.0. Се препорачува или
throwan Исклучок или повикај exit() instead. -
E_USER_WARNING(int) -
Порака за предупредување генерирана од корисникот. Ова е како
E_WARNING, except it is generated in PHP code by using the PHP function trigger_error(). Вредност на константата:512 -
E_USER_NOTICE(int) -
Порака за известување генерирана од корисникот. Ова е како
E_NOTICE, except it is generated in PHP code by using the PHP function trigger_error(). Вредност на константата:1024 -
E_USER_DEPRECATED(int) -
Порака за застареност генерирана од корисникот. Ова е како
E_DEPRECATED, except it is generated in PHP code by using the PHP function trigger_error(). Вредност на константата:16384 -
E_STRICT(int) -
Предлози за време на извршување што ги емитува PHP за извршениот код за да се обезбеди компатибилност со идните верзии.
Вредност на константата:
2048Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваОва ниво на грешка не се користи и е застарено од PHP 8.4.0.
-
E_RECOVERABLE_ERROR(int) -
Наследни „исклучоци“ од моторот што одговараат на фатална грешка што може да се фати. Слично на Грешка , но мора да се фати преку кориснички дефиниран ракувач со грешки (види set_error_handler()). Ако не се ракува, ова се однесува како
E_ERROR. Вредност на константата:4096Забелешка: Ова ниво на грешка е ефективно неискористено, единствениот случај кога ова може да се случи е при толкување на object како bool се откажува. Ова може да се случи само за внатрешни објекти. Најчестиот пример, пред PHP 8.4.0, е користење на GMP инстанца во услов.
-
E_ALL(int) -
Бит-маска што содржи секоја грешка, предупредување и известување.
Вредност на константата:
30719Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваПред PHP 8.4, вредноста на константата беше:
32767
Белешки од корисници 8 белешки
An other way to get all PHP errors that are set to be reported. This code will even work, when additional error types are added in future.
<?php
$pot = 0;
foreach (array_reverse(str_split(decbin(error_reporting()))) as $bit) {
if ($bit == 1) {
echo array_search(pow(2, $pot), get_defined_constants(true)['Core']). "<br>\n";
}
$pot++;
}
?>[Editor's note: fixed E_COMPILE_* cases that incorrectly returned E_CORE_* strings. Thanks josiebgoode.]
The following code expands on Vlad's code to show all the flags that are set. if not set, a blank line shows.
<?php
$errLvl = error_reporting();
for ($i = 0; $i < 15; $i++ ) {
print FriendlyErrorType($errLvl & pow(2, $i)) . "<br>\\n";
}
function FriendlyErrorType($type)
{
switch($type)
{
case E_ERROR: // 1 //
return 'E_ERROR';
case E_WARNING: // 2 //
return 'E_WARNING';
case E_PARSE: // 4 //
return 'E_PARSE';
case E_NOTICE: // 8 //
return 'E_NOTICE';
case E_CORE_ERROR: // 16 //
return 'E_CORE_ERROR';
case E_CORE_WARNING: // 32 //
return 'E_CORE_WARNING';
case E_COMPILE_ERROR: // 64 //
return 'E_COMPILE_ERROR';
case E_COMPILE_WARNING: // 128 //
return 'E_COMPILE_WARNING';
case E_USER_ERROR: // 256 //
return 'E_USER_ERROR';
case E_USER_WARNING: // 512 //
return 'E_USER_WARNING';
case E_USER_NOTICE: // 1024 //
return 'E_USER_NOTICE';
case E_STRICT: // 2048 //
return 'E_STRICT';
case E_RECOVERABLE_ERROR: // 4096 //
return 'E_RECOVERABLE_ERROR';
case E_DEPRECATED: // 8192 //
return 'E_DEPRECATED';
case E_USER_DEPRECATED: // 16384 //
return 'E_USER_DEPRECATED';
}
return "";
}
?>A simple and neat way to get the error level from the error code. You can even customize the error level names further.
<?php
$exceptions = [
E_ERROR => "E_ERROR",
E_WARNING => "E_WARNING",
E_PARSE => "E_PARSE",
E_NOTICE => "E_NOTICE",
E_CORE_ERROR => "E_CORE_ERROR",
E_CORE_WARNING => "E_CORE_WARNING",
E_COMPILE_ERROR => "E_COMPILE_ERROR",
E_COMPILE_WARNING => "E_COMPILE_WARNING",
E_USER_ERROR => "E_USER_ERROR",
E_USER_WARNING => "E_USER_WARNING",
E_USER_NOTICE => "E_USER_NOTICE",
E_STRICT => "E_STRICT",
E_RECOVERABLE_ERROR => "E_RECOVERABLE_ERROR",
E_DEPRECATED => "E_DEPRECATED",
E_USER_DEPRECATED => "E_USER_DEPRECATED",
E_ALL => "E_ALL"
];
echo $exceptions["1"];
$code = 256;
echo $exceptions[$code];
?>
Output:
E_ERROR
E_USER_ERROR
This will need updating when PHP updates the error level names. Otherwise, it works just fine.A neat way to have a place in code to control error reporting configuration :)
<?php
$errorsActive = [
E_ERROR => FALSE,
E_WARNING => TRUE,
E_PARSE => TRUE,
E_NOTICE => TRUE,
E_CORE_ERROR => FALSE,
E_CORE_WARNING => FALSE,
E_COMPILE_ERROR => FALSE,
E_COMPILE_WARNING => FALSE,
E_USER_ERROR => TRUE,
E_USER_WARNING => TRUE,
E_USER_NOTICE => TRUE,
E_STRICT => FALSE,
E_RECOVERABLE_ERROR => TRUE,
E_DEPRECATED => FALSE,
E_USER_DEPRECATED => TRUE,
E_ALL => FALSE,
];
error_reporting(
array_sum(
array_keys($errorsActive, $search = true)
)
);
?>As for me, the best way to get error name by int value is that. And it's works fine for me ;)
<?php
array_flip(array_slice(get_defined_constants(true)['Core'], 1, 15, true))[$type];
//the same in readable form
array_flip(
array_slice(
get_defined_constants(true)['Core'],
1,
15,
true
)
)[$type]
?>super simple error code to human readable conversion:
function prettycode($code){
return $code == 0 ? "FATAL" : array_search($code, get_defined_constants(true)['Core']);
}<?php
function getErrorTypeByValue($type) {
$constants = get_defined_constants(true);
foreach ( $constants['Core'] as $key => $value ) { // Each Core constant
if ( preg_match('/^E_/', $key ) ) { // Check error constants
if ( $type == $value )
return( "$key=$value");
}
}
} // getErrorTypeByValue()
echo "[".getErrorTypeByValue( 1 ) . "]". PHP_EOL;
echo "[".getErrorTypeByValue( 0 ) . "]". PHP_EOL;
echo "[".getErrorTypeByValue( 8 ) . "]". PHP_EOL;
?>
Will give
[E_ERROR=1]
[]
[E_NOTICE=8]