2012-05-11 3 views
1

中:が必要とするrequire_onceエラー、私はこのエラーを取得していますPHP

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

必要とするすべての私のrequire_onceを変更した後、このエラーが解決しません。このエラーを防ぐ方法はありますか?私はrequire_onceを持っていないとどうして起こるのですか?

ファイルが既に含まれているかどうかを問い合わせるために使用できる条件付きの文がありますか?

+0

あなたは既にLoggerクラスを定義して宣言しています。あなたのコードの前のどこかに。 – gorelative

+0

を2回定義しました....私はコードをスキャンしました..私は2つのロガークラスを定義していません – Matrix001

+0

必要性があります – Matrix001

答えて

0

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

あなたはLoggerと呼ばれる2つのクラスを持っているので、それはある

class Logger {}

+0

私はネットビーンズでチェック..それは一度だけ..それはstamtentsの問題を要求しています – Matrix001

1

のためにあなたのコードを確認してください。クラスをコピーして貼り付けてもクラス名を変更するのを忘れたのでしょうか?そのエラーを回避する

3

一つの方法は、常にこのようなあなたのクラスを宣言することです:

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

もちろん、これは複数回インポートされた同じクラスを持つのあなたの根本的な問題を解決していません。アプリケーションのロジックをチェックし、必要な場所を特定します。最初のセットではrequirerequire_once

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

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

違い、file1.phpは2回実行されます。 2番目には1度だけ実行されます。それは本当に簡単です。

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

+0

です私は何かを2回必要とする...それはrequire_onceではない場合でも..例外がスローされます。いいえハック..thanksそれは – Matrix001

+0

を働いています外部ファイルを2回必要とする場合、それはちょうど2回実行されます。クラス定義であれば、この問題にぶつかります。同じファイルを複数回必要とする論理的なワークフローが必要です。 –

+0

それで、requireとrequire_onceの違いは何ですか?コードに2度入れれば両方ともエラーになる場合 – Matrix001

2

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

関連する問題