PHP Conference Fukuoka 2025

定義済み定数

以下の定数は、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 スクリプティングエンジンによって生成される点が異なります。 定数の値:64
E_COMPILE_WARNING (int)
コンパイル時の (致命的でない) 警告。 E_WARNINGに似ていますが、 Zend スクリプティングエンジンによって生成される点が異なります。 定数の値:128
E_DEPRECATED (int)
実行時の非推奨の注意。 これを有効にすると、将来のバージョンで 動作しなくなるコードについての警告を受け取ることができます。 定数の値:8192
E_USER_ERROR (int)
ユーザーによって生成されるエラーメッセージ。 E_ERROR に似ていますが、 trigger_error() 関数を用いて PHP コード上で 生成される点が異なります。 定数の値:256
警告

この定数を trigger_error() と使うのは PHP 8.4.0 で非推奨となりました。 代わりに、Exceptionthrow するか、 exit() を呼ぶことが推奨されます。

E_USER_WARNING (int)
ユーザーによって生成される警告メッセージ。 E_WARNING に似ていますが、 trigger_error() 関数を用いて PHP コード上で 生成される点が異なります。 定数の値:512
E_USER_NOTICE (int)
ユーザーによって生成される注意メッセージ。 E_NOTICE に似ていますが、 trigger_error() 関数を用いて PHP コード上で 生成される点が異なります。 定数の値:1024
E_USER_DEPRECATED (int)
ユーザーによって生成される非推奨メッセージ。 E_DEPRECATED に似ていますが、 trigger_error() 関数を用いて PHP コード上で 生成される点が異なります。 定数の値:16384
E_STRICT (int)
PHP が実行時に発行する提案。 コードの前方互換性を担保するために、実行中のコードについて改善が提案されます。 定数の値:2048
警告

このエラーレベルは使われておらず、 PHP 8.4.0 で非推奨となりました。

E_RECOVERABLE_ERROR (int)
キャッチできる致命的なエラーに相当する従来のエンジン「例外」(訳注: この文脈での括弧付きの「例外」は、Error が登場するより前に用いられていた例外の「ような」仕組みを指したものです)。 Error に似ていますが、 ユーザー定義のエラーハンドラー (set_error_handler() を参照のこと) によってキャッチしなければなりません。 キャッチされなかった場合、E_ERROR と同様にスクリプトの実行を中断します。 定数の値:4096

注意: このエラーレベルは実質的に使われていません。 唯一発生しうるのは、objectbool として解釈するのに失敗したときだけです。 これは、内部的なオブジェクトでしか起こりえません。 PHP 8.4.0 より前のバージョンにおける最もよくある例としては、 GMP インスタンスを条件式で使ったときです。

E_ALL (int)
すべてのエラー、警告、注意を含んだビットマスク。 定数の値:30719
警告

PHP 8.4 より前のバージョンでは、 この定数の値は 32767 でした。

add a note

User Contributed Notes 8 notes

up
23
Andy at Azurite (co uk)
14 years ago
-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 :-)
up
15
cl at viazenetti dot de
7 years ago
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++;}?>
up
18
russthom at fivegulf dot com
13 years ago
[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 "";
}
?>
up
13
fadhilinjagi at gmail dot com
4 years ago
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_ERRORE_USER_ERRORThis will need updating when PHP updates the error level names. Otherwise, it works just fine.
up
13
bbrokman at gmail dot com
6 years ago
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)    ));?>
up
6
kezzyhko at NOSPAM dot semysha dot ru
9 years ago
As for me, the best way to get error name by int value is that. And it's works fine for me ;)<?phparray_flip(array_slice(get_defined_constants(true)['Core'], 1, 15, true))[$type];//the same in readable formarray_flip(    array_slice(        get_defined_constants(true)['Core'],        1,        15,        true    ))[$type]?>
up
2
kaioker
4 years ago
super simple error code to human readable conversion:function prettycode($code){    return $code == 0 ? "FATAL" : array_search($code, get_defined_constants(true)['Core']);}
up
-1
ErikBachmann
6 years ago
<?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]
To Top