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

作成日: 更新日:

defined関数は、指定された定数がプログラム内で既に定義されているかどうかを確認する関数です。定数とは、プログラムの実行中に値が変わることのない、固定されたデータを表すものです。例えば、データベースへの接続情報や、アプリケーションのバージョン番号など、一度設定したら変更されない値を定数として定義することがあります。この関数は、引数として確認したい定数の名前を文字列で受け取ります。そして、その名前の定数が存在すれば真(true)を、存在しなければ偽(false)をブール値として返します。defined関数を使用することで、プログラムが特定の定数に依存している場合でも、その定数が本当に定義されているか事前にチェックし、未定義の場合には適切なエラー処理を行ったり、デフォルト値を設定したりすることが可能になります。これにより、プログラムの予期せぬエラーを防ぎ、より堅牢で安定した動作を実現できます。特に、複数のファイルで構成される大規模なアプリケーションにおいて、共有される定数の有無を確認する際に非常に役立ちます。

基本的な使い方

構文(syntax)

<?php
if (defined('YOUR_CONSTANT_NAME')) {
    // 定数が定義されている場合の処理
} else {
    // 定数が定義されていない場合の処理
}
?>

引数(parameters)

string $constant_name

  • string $constant_name: 定数名を指定する文字列

戻り値(return)

bool

指定された名前の定数が定義されているかどうかを真偽値で返します。定義されていれば true、されていなければ false を返します。

サンプルコード

PHP defined() で定数 'basepath' を確認する

<?php

// PHPの `defined()` 関数は、指定された名前の定数が存在するかどうかを確認します。
// これは、定数の二重定義を防いだり、アプリケーションの重要な設定がロードされているかを
// 確認する際によく利用されます。

// キーワード 'basepath' に関連する定数の確認を示します。

// 例1: 'basepath' という名前の定数が定義されているかを確認します。
// まず、定数 'basepath' を定義します。
// (PHPの定数名は通常大文字で定義される慣習がありますが、ここではキーワードに合わせて小文字を使用します。)
define('basepath', '/var/www/html/my_application_root');

// defined() 関数を使用して 'basepath' が定義されているかを確認します。
if (defined('basepath')) {
    echo "定数 'basepath' は定義されています。\n";
    echo "その値は: " . basepath . "\n";
} else {
    echo "定数 'basepath' は定義されていません。\n";
}

echo "\n"; // 出力を区切るための空行

// 例2: 定義されていない定数 'UNDEFINED_CONSTANT' をチェックするケース。
// この定数は定義されていないため、defined() は false を返します。
if (defined('UNDEFINED_CONSTANT')) {
    echo "定数 'UNDEFINED_CONSTANT' は定義されています。\n";
} else {
    echo "定数 'UNDEFINED_CONSTANT' は定義されていません。\n";
}

?>

PHPのdefined()関数は、プログラム内で特定の定数がすでに定義されているかどうかを確認するために使用されます。この関数は、引数として確認したい定数の名前を文字列で受け取ります。戻り値は真偽値(bool型)で、指定された名前の定数が存在すればtrueを、存在しなければfalseを返します。

サンプルコードでは、まずdefine('basepath', '/var/www/html/my_application_root');によってbasepathという定数を定義しています。その上でif (defined('basepath'))と記述し、basepath定数が実際に定義されているかを確認しています。これにより、定数が定義されていればその値を利用するなどの処理を行うことができます。これは、アプリケーションのルートパスのような重要な設定が正しくロードされているかを検証する際によく利用される方法です。

一方、UNDEFINED_CONSTANTのように定義されていない定数をdefined()でチェックした場合、この関数はfalseを返します。この特性を利用することで、同じ定数が誤って二度定義されてしまうことを防いだり、特定の定数が必要な場面で存在しない場合の代替処理を実装したりすることができます。システム開発において、環境設定やパス情報などの重要な定数を安全に管理し、プログラムの安定性を確保するために非常に役立つ関数です。

defined()関数は、指定された名前の定数がすでに定義されているかを確認するために利用します。引数には確認したい定数名を文字列として正確に渡す必要があります。例えば、defined('BASEPATH')のように引用符で囲んでください。PHPの定数名は慣習的に大文字で定義されることが多いので、それに合わせて利用するとコードの可読性が高まります。

この関数は、定数の二重定義を防ぐためによく使われます。if (!defined('MY_CONSTANT')) { define('MY_CONSTANT', 'some_value'); }のように記述することで、未定義の場合のみ定数を定義し、エラーを防ぐことができます。また、アプリケーションの重要な設定値が正しくロードされているかを確認する際にも役立ちます。__FILE__のようなマジック定数はdefined()の対象外である点にご注意ください。

PHP defined() で定数定義をチェックする

<?php

/**
 * アプリケーションの設定に関する定数を管理し、
 * `defined()` を使用して定数が定義済みかを確認するサンプルクラスです。
 */
class AppConfig
{
    // アプリケーションのバージョンを定義する定数
    public const APP_VERSION = '1.0.0';

    /**
     * 指定された定数名が定義されているかを確認し、結果を表示します。
     *
     * @param string $constantName 確認したい定数の名前
     * @return void
     */
    public function checkConstant(string $constantName): void
    {
        // defined() は、指定した名前の定数が存在すれば true を、しなければ false を返します。
        if (defined($constantName)) {
            // 定義されている場合、その値も表示します。
            // constant() 関数を使うと、文字列から定数の値を取得できます。
            echo "定数 '{$constantName}' は定義されています。値: " . constant($constantName) . PHP_EOL;
        } else {
            // 定義されていない場合
            echo "定数 '{$constantName}' は定義されていません。" . PHP_EOL;
        }
    }
}

// クラスのインスタンスを作成
$config = new AppConfig();

// 1. クラス内で定義済みの定数 'AppConfig::APP_VERSION' を確認します。
// クラス定数をチェックする場合、'クラス名::定数名' の形式で指定します。
$config->checkConstant('AppConfig::APP_VERSION');

// 2. まだ定義されていない定数 'DEBUG_MODE' を確認します。
$config->checkConstant('DEBUG_MODE');

PHPのdefined関数は、指定された定数がプログラム内で既に定義されているかどうかを確認するために使用されます。

この関数は引数として、確認したい定数の名前を文字列で受け取ります。そして、その定数が定義されていればtrueを、定義されていなければfalseを真偽値(bool)として返します。これにより、定数の存在をプログラムで判断できます。

サンプルコードでは、AppConfigクラスに定義されたクラス定数APP_VERSIONと、まだ定義されていない定数DEBUG_MODEの定義状況をdefined()関数でチェックしています。クラス定数をチェックする際には、AppConfig::APP_VERSIONのようにクラス名::定数名の形式で指定することがポイントです。

もし定数が定義されていると判断された場合、defined()trueを返すため、その定数の値を取得するためにconstant()関数が利用されています。constant()関数は、文字列として与えられた定数名から、その定数の実際の値を取得する役割を持ちます。

defined()関数を使うことで、特定の定数が存在するかどうかを事前に確認し、未定義の定数にアクセスしてエラーが発生するのを防ぐなど、安全で堅牢なプログラムを作成するのに役立ちます。

defined()関数は、指定された名前の定数がPHP内で既に定義されているかを確認し、trueまたはfalseを返します。これにより、未定義の定数へのアクセスによるエラーを防ぎ、堅牢なコードを記述できます。クラス定数を確認する際は、'クラス名::定数名'という文字列形式で引数に渡す必要があります。これは直接定数にアクセスする際の記法とは異なりますので特に注意が必要です。定数が定義済みと判断された場合、constant()関数に定数名を文字列で渡すことでその値を取得できます。この一連の流れは、アプリケーションの設定値の有無を確認し、その値を利用する際に役立つため、安全なプログラム作成に不可欠です。

PHP: defined()とdefine()で定数を管理する

<?php

/**
 * アプリケーションの定数を管理する関数。
 * defined() と define() を使用して、定数の存在を確認し、必要に応じて定義します。
 */
function manageAppConstants(): void
{
    // 定数 APP_VERSION が未定義の場合のみ定義する
    // defined('定数名') は、指定された定数が既に定義されているかチェックし、真偽値を返します。
    // !defined(...) は、「定義されていない場合」を意味します。
    if (!defined('APP_VERSION')) {
        // define('定数名', '値') は、新しい定数を定義します。
        define('APP_VERSION', '1.0.0');
        echo "定数 APP_VERSION を定義しました。値: " . APP_VERSION . "\n";
    } else {
        echo "定数 APP_VERSION は既に定義されています。値: " . APP_VERSION . "\n";
    }

    // 別の定数 SERVICE_NAME も同様に処理する
    if (!defined('SERVICE_NAME')) {
        define('SERVICE_NAME', 'My Awesome Service');
        echo "定数 SERVICE_NAME を定義しました。値: " . SERVICE_NAME . "\n";
    } else {
        echo "定数 SERVICE_NAME は既に定義されています。値: " . SERVICE_NAME . "\n";
    }

    echo "\n--- 定数の使用例 ---\n";
    // 定数は一度定義されると、その値は変更できません。
    // 定数名で直接アクセスします。
    echo "アプリケーションバージョン: " . APP_VERSION . "\n";
    echo "サービス名: " . SERVICE_NAME . "\n";
}

// 関数を実行して定数管理ロジックを動作させる
manageAppConstants();

echo "\n--- 関数外からの定数アクセス ---\n";

// 定数はグローバルスコープで利用可能なので、関数外からもアクセスできます。
if (defined('APP_VERSION')) {
    echo "グローバル定数 APP_VERSION: " . APP_VERSION . "\n";
} else {
    echo "グローバル定数 APP_VERSION は定義されていません。\n";
}

if (defined('SERVICE_NAME')) {
    echo "グローバル定数 SERVICE_NAME: " . SERVICE_NAME . "\n";
} else {
    echo "グローバル定数 SERVICE_NAME は定義されていません。\n";
}

PHPのdefined関数は、指定された定数が既に定義されているかを確認するために使われます。引数には、確認したい定数の名前を文字列で指定します。この関数は、定数が存在すればtrue、存在しなければfalseという真偽値を返します。

新しい定数を定義する際、define関数と組み合わせて使うことで、同じ定数が重複して定義されるのを防ぐことができます。具体的には、if (!defined('定数名')) { define('定数名', '値'); } のように記述し、「定数がまだ定義されていなければ定義する」という安全な方法で定数を管理できます。

提示されたサンプルコードでは、APP_VERSIONSERVICE_NAMEなどのアプリケーション定数を管理する例を紹介しています。defined関数で定数の存在を調べ、未定義の場合にのみdefine関数で値を設定しています。一度定義された定数の値は変更できません。プログラム全体で共通の固定値として、設定やバージョン管理に便利に利用でき、関数内外を問わずどこからでもアクセス可能です。

define関数で一度定義した定数は、その後の再定義や値の変更はできません。定数はグローバルスコープで利用可能となり、プログラム内のどこからでもアクセスできます。定数名は大文字のスネークケースを使用するのが一般的で、PHP 8.0以降では大文字小文字を常に区別します。defined関数は、定数が既に定義されているかを確認するために利用し、同じ定数を複数回定義するエラーを防ぐ上で非常に重要です。このサンプルで扱うのはグローバル定数であり、クラス内で定義するクラス定数とは異なる点にもご注意ください。

PHP defined() で定数を確認する

<?php

/**
 * この関数は、定数が定義されているかどうかを確認する `defined()` 関数の使用方法を示します。
 *
 * `defined()` は、指定された名前の定数が存在し、定義されている場合に `true` を返します。
 * 存在しない場合は `false` を返します。
 * この関数は**定数**の存在を確認するためのものであり、通常の**変数**の存在を確認するものではありません。
 */
function demonstrateDefinedFunction(): void
{
    // PHPで定数を定義する一般的な方法
    define('APP_NAME', 'My Awesome Application');
    const MAX_ITEMS = 100; // PHP 5.3以降では、constキーワードでも定数を定義できます

    echo "--- 定数の定義状態を確認します ---\n";

    // 'APP_NAME' 定数が定義されているか確認
    if (defined('APP_NAME')) {
        echo "定数 'APP_NAME' は定義されています。値: " . APP_NAME . "\n";
    } else {
        echo "定数 'APP_NAME' は定義されていません。\n";
    }

    // 'MAX_ITEMS' 定数が定義されているか確認
    if (defined('MAX_ITEMS')) {
        echo "定数 'MAX_ITEMS' は定義されています。値: " . MAX_ITEMS . "\n";
    } else {
        echo "定数 'MAX_ITEMS' は定義されていません。\n";
    }

    // 定義されていない 'UNDEFINED_CONSTANT' を確認
    if (defined('UNDEFINED_CONSTANT')) {
        echo "定数 'UNDEFINED_CONSTANT' は定義されています。(これは予期せぬ結果です)\n";
    } else {
        echo "定数 'UNDEFINED_CONSTANT' は定義されていません。(期待通りです)\n";
    }

    echo "\n--- 重要な注意点 ---\n";
    echo "`defined()` 関数は**定数**の存在をチェックするためのものであり、\n";
    echo "通常の**変数** (例: \$myVariable) の存在をチェックするものではありません。\n";
    echo "通常の変数の存在チェックには `isset()` や `empty()` を使用します。\n";
}

// 関数を実行してデモンストレーションを開始します
demonstrateDefinedFunction();

PHPのdefined関数は、指定した名前の定数が現在定義されているかどうかを確認するために使用する関数です。この関数には、確認したい定数の名前を文字列で引数として渡します。もしその定数が定義されていればtrue(真)を返し、定義されていなければfalse(偽)を返します。

サンプルコードでは、define()関数やconstキーワードで定義されたAPP_NAMEMAX_ITEMSといった定数に対してはtrueを返し、定義されていないUNDEFINED_CONSTANTに対してはfalseを返すことが示されています。これにより、プログラムの実行中に定数の存在を判断し、適切な処理を行うことができます。

特に重要な点として、defined()関数は定数の存在のみをチェックするためのものであり、通常の変数(例えば$myVariableのようなもの)の存在をチェックするものではないことに注意してください。変数の存在確認には、isset()empty()といった別の関数を使用します。

defined()関数は、引数で指定された名前の「定数」が定義されているかを確認し、その結果をtrueまたはfalseで返します。最も重要な注意点は、この関数が通常の「変数」(例:$myVariable)の存在チェックには使えない点です。変数そのものの存在を確認する場合には、代わりにisset()関数やempty()関数を使用してください。defined()は、define()関数やconstキーワードで宣言された定数に対してのみ有効です。この区別を正しく理解し、適切な関数を選んで利用することが、安全で正確なプログラミングにつながります。

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