3

constant() のマニュアル エントリには、定数が定義されていない場合、関数は NULL を返す必要があると記載されています。ただし、以下のコードの場合、致命的なエラーが発生します。

$constant = get_class($this) . '::' . $name;
$value = constant($constant);

$name が有効な場合、問題なく動作します。そうでない場合は、「Undefined class constant ...」という致命的なエラーが発生します。マニュアルには E_WARNING エラーも発生するはずですが、ログ ファイルには表示されません。

4

3 に答える 3

2

PHP の設定、すべてのエラーを致命的なエラーとして扱うように設定されている場合があります。その場合は、定数を取得する前に定数が存在するかどうかを確認すると修正されます。

$constant = get_class($this) . '::' . $name;
$value = defined($constant) ? constant($constant) : null;
于 2012-07-30T21:48:32.170 に答える
0

定数が最初に定義されていることを確認してから、代わりに例外をスローします (または、従うフローに進みます)。

于 2012-07-30T21:51:17.763 に答える
0

このエラーは PHP 8 でも発生します。下位互換性のない変更
を参照してください。

多くの警告がエラー例外に変換されました。

  • 未定義の修飾されていない定数にアクセスしようとしています。以前は、修飾されていない定数アクセスは警告となり、文字列として解釈されていました。
于 2021-08-23T15:20:03.960 に答える