3

\App\カプセル化されたすべてのアプリを含む1つの名前空間(たとえば、(クライアント フォルダーを優先し、クライアントのフォルダーに必要なオーバーライド ファイルを作成するだけで、メイン アプリの機能をオーバーライドしてクライアントの要求を満たすことができます)

現在、クライアントのオーバーライド クラスが元のクラスを拡張した方がよいのではないかと考えています。これの主な用途は、クラス メソッドの一部のみを編集することであることに気付きました。 「メインクラス」に出現する可能性のある新しいメソッドの場合。そして、名前空間を維持しながら、これを実現する方法に苦労してきました。

例: 販売コントローラー クラス ==> \App\Controller\Sale

  • 「Client/App/Controller/Sale.php」ファイルがない場合、デフォルトの「Main/App/Controller/Sale.php」が使用されます。
  • しかし、もしあれば、私が欲しいのは、「Client/App/Controller/Sale.php」が「Main/App/Controller/Sale.php」を拡張できることです

    <?php 
      namespace App\Controller
      use \Main\Controller\Sale as OriginalClass //The Sale class in Main Folder
    
      class Sale extend OriginalClass {...}
    
  • このようにして、クライアントのクラスの一部のメソッドのみをオーバーライドでき、メイン クラスが更新された場合、クライアントのアプリに反映されます。

問題は、クライアントとメイン クラスの両方が\App\名前空間にあるため、上記の "use" ステートメントを機能させる方法がわからないことです。主な理由は、ファイルの名前空間が異なるため、先頭に追加された名前空間 (例では"\Main + namespace ) が機能しないことです。

それがうまくいくと私が思った別の方法は、作曲家のオートロードをいじって、名前空間が「メイン」または「オリジナル」で始まるかどうかを確認し、名前空間からその部分を削除して、「メイン」フォルダーを強制的に使用することです。しかし、これを実装できる場所が見つかりませんでした。

私が考えたもう 1 つの解決策は、メイン クラスの機能をサブ クラスに分割することでした。これは、現在のオートロード スキームを使用してオーバーライドできますが、システム全体に非常に多くのクラスとファイルを分散させることが賢明かどうかはわかりません。

ヘルプやガイダンスはいつでも大歓迎です。

4

1 に答える 1