1

このエラーが発生しています:

Fatal error: Cannot redeclare class Logger in C:\xampp\htdocs\Speakom\API\Logger.php on line 3

私のすべてのrequire_onceをrequireに変更した後も、このエラーは解決しません。このエラーを防ぐ方法はありますか? require_once を持っていない場合、なぜそれが起こるのですか?

ファイルが既に含まれているかどうかを照会し、それを含めるために使用できる条件文はありますか?

4

4 に答える 4

3

このエラーを回避する 1 つの方法は、常に次のようにクラスを宣言することです。

if(!class_exists('ClassName')) {
    class ClassName {
        // ...
    }
}

もちろん、これは同じクラスが複数回インポートされるという根本的な問題を解決しません。アプリケーションのロジックを確認し、それが必要な場所を特定してください。

requireとの違いrequire_once

require 'file1.php';
require 'file1.php';

// versus...
require_once 'file1.php';
require_once 'file1.php';

最初のセットでfile1.phpは、2 回実行されます。2番目では、一度だけ実行されます。それは本当にそれと同じくらい簡単です。

両方でエラーが発生する場合は、インクルードしようとしているファイルにエラーがある可能性があります。インクルード ファイルまたは必須ファイル内のコードは、インクルードされた時点と同じスコープで実行されることに注意してください。

于 2012-05-11T16:31:34.920 に答える
2

このバグは、require と require_once の違いにあります。以前は、require_once ステートメントがファイルを 1 回ロードしようとすると、その後のインクルードは何もしませんでした。これで変更が完了したので、すべてのインクルードのどこで require を行っているかを追跡する必要があります。覚えておいてください。一度必要な場合は、一度インクルードすれば完了です。PHPはそれをすべてグローバルに保持するため、インクルードツリー内のファイルの1つにそのファイルが含まれている限り、すべてのファイルに含める必要はありません。

于 2012-05-11T16:33:24.150 に答える
1

という 2 つのクラスがあるためですLogger。クラスファイルをコピーして貼り付けたのに、クラス名を変更するのを忘れていませんか?

于 2012-05-11T16:30:55.623 に答える
0

コードのどこにも 2 つの Logger クラスがないことを確認しましたか?

コードを確認してください

class Logger {}

于 2012-05-11T16:29:38.540 に答える