get_defined_constants()は、すべての定義された定数を取得するためのPHPに組み込み関数です。キーが一定の名前で、値が一定の値である連想配列を返します。これは、ランタイム環境をデバッグ、反映、または分析する場合に役立ちます。ただし、PHPの異なるバージョンでは、この関数の動作は、主に次の側面に反映されているいくつかの違いを示す場合があります。
PHPの開発により、特に新しい拡張機能を追加したり、既存のモジュールをリファクタリングしたりした後、新しいコア定数が常に導入されています。たとえば、PHP 7.XおよびPHP 8.Xでは、エラー処理メカニズムの変化により、多数の新しいE_*エラーレベル定数が導入されました。
print_r(array_keys(get_defined_constants()));
PHP 5.6では、 E_ERRORのようなマージ定数が表示されない場合があります。 e_recoverable_errorですが、PHP 7の後、そのような複合値のさらに多くの定義があります。
PHP 5.3から始めて、 get_defined_constants()はブールパラメーター$ caltaurizeをサポートし、 trueに設定すると、定数はさらに分類されます。
print_r(get_defined_constants(true));
さまざまなPHPバージョンでは、異なる拡張モジュールの分類名が変更される場合があります。例えば:
PHP 7.2の配列には、コア、 PCRE 、 SPL 、日付、 LIBXML 、 OpenSSL 、 Curlなどが含まれている場合があります。
PHP 8.0の後に導入されたFFI 、ナトリウム、繊維なども、出力結果に追加されます。
特定の定数がget_defined_constants()の結果に表示されるかどうかは、 php.iniまたはコンパイルオプションなどの構成ファイルによって影響を受ける可能性があります。たとえば、 Zend Opcacheが有効になっているかどうか、特定の拡張モジュールがロードされているかどうかなど。
define('MY_APP_VERSION', '1.0.0');
print_r(get_defined_constants());
この出力は、多くの場合、開発サーバーと生産サーバーの間で一貫性がありません。これは、有効な拡張機能と構成パラメーターが異なる場合があるためです。
PHP 8は、JIT、一致式、属性などの構文機能を導入し、それに応じて新しい定数をもたらします。 get_defined_constantsを実行すると、 php_fd_setsize 、 t_match 、 t_attributeなどの定数の発生が見つかります。
これらの新しい定数は古いバージョンにはまったく存在しないため、非常に互換性のあるコードを書くときにこれらの定数に依存している場合は、 defined()関数を使用して判断する必要があります。
まれに、いくつかの定義された定数は、新しいバージョンで変更または破棄されます。 PHPチームは通常、後方互換性を保証しますが、メジャーバージョンのアップグレードがアップグレードされたときに調整を行うことは除外されません。たとえば、基礎となるシステムと対話する一部の拡張機能は、デフォルト値を変更したり、Cライブラリの更新に依存しているためサポートされていない特定の定数を削除する場合があります。