PHPのエラー『Notice: Constant Already Defined』の解決方法

  • 作成日 2025.07.17
  • php
PHPのエラー『Notice: Constant Already Defined』の解決方法

PHPで開発中に『Notice: Constant Already Defined』というエラーが発生することがあります。このエラーは、同じ名前の定数が複数回定義された場合に発生します。この記事では、このエラーの原因と解決方法について詳しく説明します。

エラーの発生条件

『Notice: Constant Already Defined』は、同じ名前の定数が複数回定義された場合に発生します。このエラーは、主に以下のような状況で発生します。

1. 定数が複数回定義されている

同じ名前の定数が複数回定義されている場合、このエラーが発生します。定数は一度定義すると変更できないため、複数回定義することはできません。

<?php
define('MY_CONSTANT', 'value1');
define('MY_CONSTANT', 'value2'); // Notice: Constant MY_CONSTANT already defined
?>

2. 定数が異なるファイルで定義されている

異なるファイルで同じ名前の定数が定義されている場合、このエラーが発生します。ファイルを読み込む際に、定数が重複して定義されることがあります。

<?php
// file1.php
define('MY_CONSTANT', 'value1');

// file2.php
define('MY_CONSTANT', 'value2'); // Notice: Constant MY_CONSTANT already defined
?>

3. 定数が条件分岐内で定義されている

条件分岐内で定数を定義している場合、条件が複数回評価されるとこのエラーが発生します。

<?php
if (true) {
    define('MY_CONSTANT', 'value1');
}

if (true) {
    define('MY_CONSTANT', 'value2'); // Notice: Constant MY_CONSTANT already defined
}
?>

4. 定数がループ内で定義されている

ループ内で定数を定義している場合、ループが複数回実行されるとこのエラーが発生します。

<?php
for ($i = 0; $i < 2; $i++) {
    define('MY_CONSTANT', 'value' . $i); // Notice: Constant MY_CONSTANT already defined
}
?>

5. 定数が関数内で定義されている

関数内で定数を定義している場合、関数が複数回呼び出されるとこのエラーが発生します。

<?php
function defineConstant() {
    define('MY_CONSTANT', 'value');
}

defineConstant();
defineConstant(); // Notice: Constant MY_CONSTANT already defined
?>

6. 定数がクラス内で定義されている

クラス内で定数を定義している場合、クラスが複数回インスタンス化されるとこのエラーが発生します。

<?php
class MyClass {
    public function __construct() {
        define('MY_CONSTANT', 'value');
    }
}

$obj1 = new MyClass();
$obj2 = new MyClass(); // Notice: Constant MY_CONSTANT already defined
}
?>

7. 定数が異なるスコープで定義されている

異なるスコープで同じ名前の定数が定義されている場合、このエラーが発生します。定数はグローバルスコープで定義されるため、スコープに関係なく重複して定義することはできません。

<?php
function defineConstant() {
    define('MY_CONSTANT', 'value');
}

define('MY_CONSTANT', 'value');
defineConstant(); // Notice: Constant MY_CONSTANT already defined
?>

8. 定数が異なる名前空間で定義されている

異なる名前空間で同じ名前の定数が定義されている場合、このエラーが発生します。定数は名前空間に関係なくグローバルに定義されるため、名前空間をまたいで重複して定義することはできません。

<?php
namespace MyNamespace;

define('MY_CONSTANT', 'value1');

namespace AnotherNamespace;

define('MY_CONSTANT', 'value2'); // Notice: Constant MY_CONSTANT already defined
?>

9. 定数が異なるファイルでインクルードされている

異なるファイルで同じ名前の定数が定義され、それらのファイルがインクルードされている場合、このエラーが発生します。

<?php
// file1.php
define('MY_CONSTANT', 'value1');

// file2.php
define('MY_CONSTANT', 'value2');

// main.php
include 'file1.php';
include 'file2.php'; // Notice: Constant MY_CONSTANT already defined
?>

10. 定数が異なる設定ファイルで定義されている

異なる設定ファイルで同じ名前の定数が定義されている場合、このエラーが発生します。設定ファイルを読み込む際に、定数が重複して定義されることがあります。

<?php
// config1.php
define('MY_CONSTANT', 'value1');

// config2.php
define('MY_CONSTANT', 'value2');

// main.php
include 'config1.php';
include 'config2.php'; // Notice: Constant MY_CONSTANT already defined
?>

11. 定数が異なるライブラリで定義されている

異なるライブラリで同じ名前の定数が定義されている場合、このエラーが発生します。ライブラリを読み込む際に、定数が重複して定義されることがあります。

<?php
// library1.php
define('MY_CONSTANT', 'value1');

// library2.php
define('MY_CONSTANT', 'value2');

// main.php
include 'library1.php';
include 'library2.php'; // Notice: Constant MY_CONSTANT already defined
?>

12. 定数が異なるプラグインで定義されている

異なるプラグインで同じ名前の定数が定義されている場合、このエラーが発生します。プラグインを読み込む際に、定数が重複して定義されることがあります。

<?php
// plugin1.php
define('MY_CONSTANT', 'value1');

// plugin2.php
define('MY_CONSTANT', 'value2');

// main.php
include 'plugin1.php';
include 'plugin2.php'; // Notice: Constant MY_CONSTANT already defined
?>

これらの例を見てわかるように、『Notice: Constant Already Defined』は、主に定数の重複定義によって発生します。定数を定義する際には、既に定義されていないか確認することが重要です。