1

PHPを使用してWebサイトをプログラミングしていSymfony2ます。

MainContentファイルにクラスを定義しましたMainController.php

そして、私はこのクラスを他の名前のコントローラーファイルで使用する必要がありましたSecurityController.php

これらのクラスは両方とも同じ名前空間で定義されていますが、エラーが発生しました。

Class 'MainContent' not found...

そこで、クラスをもう一度定義しようとしましたSecurityController.phpが、結果は次のようになります。

Cannot redeclare class 'MainContent...'

わかりません、宣言されているかどうかはわかりません。

実際、私はC#プログラマーであり、これらの言語間のいくつかの違いのために混乱しているかもしれません。

4

1 に答える 1

0

symfonyはいわゆるオートローディングを使用します。クラスは独自のファイルで定義されていないため、自動ロードのルールに従ってロードできず、クラスが見つかりません。ただし、クラスを定義すると、スクリプトは正常に処理され、同じクラスを定義する他のファイルが含まれ、衝突(クラスを再宣言できません)が生成されます。

考えられる解決策は次のとおりです。

  • クラスを1か所で定義し(コントローラーの外部で最適)、必要なときにいつでもinclude_once/require_onceを使用します
  • クラスを実際にSymfonyヘルパークラスにして、自動ロードが実際に機能するようにします
  • クラスを宣言するときはいつでも、

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

于 2012-05-03T13:29:25.980 に答える