ホーム › エラー解決 › PHP › Cannot redeclare function
PHP ERROR

PHP Cannot redeclare function の原因と解決法

同じ名前の関数を2回定義すると発生するエラーです。ファイルの二重includeが原因になっていることが多いのが特徴です。

このエラーメッセージ

PHP Fatal error: Cannot redeclare greet() (previously declared)

原因

❌ エラーになるコード

NG
<?php
function greet() {
    echo "こんにちは";
}
function greet() { // 同名関数を再定義
    echo "こんばんは";
}
greet();

✅ 修正したコード

OK
<?php
function greet($time = "day") {
    if ($time === "night") {
        echo "こんばんは";
    } else {
        echo "こんにちは";
    }
}
greet();
echo "\n";
greet("night");
▶ 修正済みコードを実行エディタで開く
progoのPHP実行環境(インストール不要・登録不要)でその場で動作を確認できます。

解決のポイント

関数は1つの名前につき1回しか定義できません。挙動を分けたい場合は引数で分岐させます。ファイル読み込みが原因の場合は、include/requireをrequire_onceに変えると同じファイルが二重に読み込まれなくなります。function_exists()で定義済みか確認する方法もあります。

よくある質問

includeとrequire_onceの違いは?
require_onceは同じファイルを1回しか読み込みません。関数やクラス定義を含むファイルは必ず_once系を使うのが安全です。
クラスでも同じエラーが出る?
はい。Cannot redeclare class となります。対策は同じで、require_onceやオートローダーを使います。