【PHP8.x】constant関数の使い方

作成日: 更新日:

constant関数は、引数で指定された名前を持つ定数の値を取得する関数です。通常、定数の値は定数名を直接コードに記述してアクセスしますが、この関数を使用すると、文字列として与えられた定数名からその値を取得できます。これにより、使用する定数の名前を変数に格納したり、関数の引数として渡したりするなど、プログラムの実行状況に応じて動的に定数を扱うことが可能になります。例えば、$name = 'MY_CONSTANT'; のように変数に定数名が格納されている場合、constant($name) と記述することで MY_CONSTANT 定数の値を参照できます。また、'ClassName::CONST_NAME' のようにクラス定数の名前を文字列で指定して、その値を取得することも可能です。もし指定した名前の定数が定義されていない場合は、この関数は null を返し、警告(E_WARNING)が発生しますので注意が必要です。定数名は大文字と小文字が厳密に区別されるため、正確な名前を指定する必要があります。

基本的な使い方

構文(syntax)

constant(string $name): mixed

引数(parameters)

string $name

  • string $name: 定数名として使用する文字列

戻り値(return)

mixed

定数として定義された値が返されます。

サンプルコード

PHP定数管理と重複定義回避

<?php

/**
 * PHPの定数管理と、定数が既に定義されている場合の挙動を示す関数。
 *
 * この関数は、定数の定義 (define)、存在チェック (defined)、
 * および文字列名による値の取得 (constant) の基本的な使い方を、
 * システムエンジニアを目指す初心者向けに簡潔にデモンストレーションします。
 * 特に「定数が既に定義されている」という状況を避け、安全に定数を扱う方法に焦点を当てます。
 */
function manageAndRetrieveConstants(): void
{
    // 定数名
    $firstConstantName = 'APP_ENV';
    $secondConstantName = 'DEBUG_MODE';

    echo "--- 定数の初回定義と取得 ---\n";

    // 1. 定数を初めて定義します。
    //    'defined()' で定数が既に存在しないかを確認することで、
    //    「定数が既に定義されている」という警告 (E_WARNING) を防ぎます。
    if (!defined($firstConstantName)) {
        define($firstConstantName, 'development');
        echo "定数 '$firstConstantName' を 'development' で定義しました。\n";
    } else {
        // このパスは初回実行時には通らないはずです。
        echo "定数 '$firstConstantName' は既に定義されています。\n";
    }

    // 2. constant() 関数を使って、定数名(文字列)からその値を取得します。
    //    constant() は定数が既に定義されていることを前提として動作します。
    $envValue = constant($firstConstantName);
    echo "constant('$firstConstantName') で取得した値: " . $envValue . "\n\n";

    echo "--- 定数の重複定義試行とその回避 ---\n";

    // 3. 既に定義されている定数を再度定義しようとする状況をシミュレートします。
    //    ここでも 'defined()' を使用して重複定義を回避します。
    echo "定数 '$firstConstantName' を 'production' で再定義しようとします。\n";
    if (!defined($firstConstantName)) {
        define($firstConstantName, 'production');
        // この行は、上記の 'if' 条件により実行されません。
        echo "定数 '$firstConstantName' を 'production' で再定義しました。\n";
    } else {
        echo "定数 '$firstConstantName' は既に定義されているため、再定義はスキップされました。\n";
    }

    // 4. 再定義が試行された後も、定数の値が変わっていないことを確認します。
    $currentEnvValue = constant($firstConstantName);
    echo "再定義試行後の constant('$firstConstantName') で取得した値: " . $currentEnvValue . "\n\n";

    echo "--- 別の定数の条件付き定義と取得 ---\n";

    // 5. 別の新しい定数を定義する際も、同様に存在チェックを行うのがベストプラクティスです。
    if (!defined($secondConstantName)) {
        define($secondConstantName, true);
        echo "定数 '$secondConstantName' を 'true' で定義しました。\n";
    } else {
        echo "定数 '$secondConstantName' は既に定義されています。\n";
    }

    // 6. 定義された新しい定数の値を取得します。
    //    boolean型の値も constant() で取得できます。
    $debugModeValue = constant($secondConstantName);
    // boolean値を表示するために文字列にキャスト
    echo "constant('$secondConstantName') で取得した値: " . ($debugModeValue ? 'true' : 'false') . "\n";
}

// 上記の関数を実行して、定数管理のデモンストレーションを開始します。
manageAndRetrieveConstants();

?>

このPHPコードは、システムエンジニアを目指す初心者の方向けに、PHPにおける定数の安全な管理と取得方法を示しています。特にconstant()関数に焦点を当て、定数名(文字列)からその値を取得する方法を学ぶことができます。

constant($name)関数は、引数として定数名を文字列で受け取り、その定数に格納されている値を返します。戻り値の型は定数の値によって様々(mixed)です。

サンプルコードでは、まずdefine()関数で定数を定義する際に、defined()関数を使ってその定数がまだ定義されていないかを確認しています。これにより「定数が既に定義されています」という警告を回避し、安全に定数を扱えるようになります。一度定義された定数の値は変更できませんが、defined()によるチェックを行うことで、不意な再定義試行による問題を未然に防ぎます。

定数が定義された後は、constant('APP_ENV')のように文字列で定数名を指定して、その値「development」を取得しています。再定義を試みる箇所でもdefined()関数を用いることで、定数の値が予期せず変更されることなく、初回に定義した値が保持されることを確認できます。このように、constant()関数は、動的に定数名が決まる場合など、変数を介して定数の値を取得したい場面で特に役立ちます。

PHPで定数を使う際は、define()関数で定数を定義します。同じ名前の定数を複数回定義すると警告が発生するため、define()の前にdefined()関数で定数が既に定義されていないか確認することが非常に重要です。constant()関数は、文字列で指定した定数名からその値を取得する際に使います。これは、定数名を動的に決定して値を取得したい場合に特に役立ちます。ただし、constant()関数も、呼び出す定数が実際に定義されていることを前提としますので、安全のためにはdefined()で確認してから利用すると良いでしょう。一度定義された定数の値は後から変更できない点も覚えておいてください。

PHP constant() 関数で定数の値を取得する

<?php

/**
 * PHPの定数に関するサンプルコードです。
 * `constant()` 関数は、定数の名前を文字列で指定してその値を取得します。
 * 主に定数名が動的に決まる場合に使用されます。
 */

// 1. グローバル定数の定義
// `define` を使用した定数定義
define('APP_NAME', 'My Awesome App');
// `const` キーワードを使用した定数定義 (PHP 5.3以降でグローバルスコープでも利用可能)
const MAX_USERS = 1000;

// 2. クラス内での定数定義 (クラス定数)
class AppConfig
{
    // クラス定数
    const DB_HOST = 'localhost';
    const DB_USER = 'root';
}

echo "--- 定数の値を取得 ---" . PHP_EOL;

// 3. `constant()` 関数を使ってグローバル定数の値を取得する
// 定数名 'APP_NAME' の値を取得
$appName = constant('APP_NAME');
echo "アプリケーション名: " . $appName . PHP_EOL;

// 定数名 'MAX_USERS' の値を取得
$maxUsers = constant('MAX_USERS');
echo "最大ユーザー数: " . $maxUsers . PHP_EOL;

// 4. `constant()` 関数を使ってクラス定数の値を取得する
// クラス定数を参照する場合、'ClassName::CONSTANT_NAME' の形式で文字列を渡します
$dbHost = constant('AppConfig::DB_HOST');
echo "データベースホスト: " . $dbHost . PHP_EOL;

$dbUser = constant('AppConfig::DB_USER');
echo "データベースユーザー: " . $dbUser . PHP_EOL;

echo PHP_EOL;
echo "--- 参考: 直接定数を参照する場合 ---" . PHP_EOL;
// 通常は以下のように直接定数名を使って値を取得します。
echo "アプリケーション名 (直接参照): " . APP_NAME . PHP_EOL;
echo "最大ユーザー数 (直接参照): " . MAX_USERS . PHP_EOL;
echo "データベースホスト (直接参照): " . AppConfig::DB_HOST . PHP_EOL;

?>

PHPのconstant()関数は、定数の名前を文字列として指定することで、その定数の値を取得するために使用されます。引数$nameには、取得したい定数の名前を文字列で渡します。例えば、defineconstキーワードで定義されたグローバル定数であれば'APP_NAME'のように、またクラス内で定義されたクラス定数であれば'AppConfig::DB_HOST'のように、クラス名と定数名を::で区切って指定します。

戻り値はmixed型で、指定された定数の値が返されます。もし指定した定数が見つからない場合は、PHP 8ではWarningが発生し、nullが返されます。

この関数は、定数の名前がプログラムの実行中に動的に決まる場合など、直接定数名を記述できない状況で特に役立ちます。通常は、定数名を直接記述して値を取得しますが、constant()関数は、文字列として定数名を扱う必要がある際に利用される、動的な定数参照のための機能です。

constant()関数は、定数名がプログラムの実行中に変数などで動的に決まる場合に利用します。通常はAPP_NAMEのように定数名を直接記述して値を取得するのが一般的で推奨される方法です。constant()関数でクラス定数を参照する際は、'クラス名::定数名'という文字列形式で指定する必要があります。存在しない定数名を指定すると、PHP 8ではWarningが発生しnullが返されますので、定数名の間違いには十分ご注意ください。

【PHP8.x】constant関数の使い方 | いっしー@Webエンジニア