0

これは、私が作成しているフレームワークの現在のシステムです。

__getCoreクラスで定義された関数を介して、既存のクラスの名前を持つ、存在しないプロパティにアクセスする要求に応じてオブジェクトを作成します。Coreクラスはすべてのクラスを拡張します。

したがって、次のように機能します。

class Someclass extends Core
{
    public function classmethod()
    {
        $this->otherclass->method();
    }
}

これは、私が望むとおりに機能します。ただし、このシステムを使用してオブジェクトのプロパティを編集/作成する方法が(多くのフラストレーションの後で)わかりません。

したがって、このようなものは機能しません。

$this->view->somevar = "newvalue"; // this doesn't work. 

__set関数で何かしなければならないと思いますが、わかりませんでした。

この問題に取り組む方法について、次の提案を受けました。

依存性注入、名前空間、シングルトンパターン。

これらのパターンの1つを使用して、私がやろうとしていることを実装する方法を見てみたいと思います。

単純な問題を解決するためにどちらを選択するかわかりません。他のクラスのオブジェクトを使用するため、__constructのパラメーターに何も入れたり、グローバル変数を使用したりする必要はありません。

使ってます__autoload.

私はあなたの助けを借りてこの問題に取り組むことができると思います。

4

1 に答える 1

2

まず第一に、あなたが試みているアーキテクチャは非常に悪いです。どうやらあなたは「魔法」を使って他のオブジェクトにプロパティとしてアタッチされたオブジェクトを作成しています。_ get / _setを使用すると、後でではなく早く問題が発生するため、これは悪いことです。また、共通の親から拡張すると、巨大な継承ツリーが生成され、ほとんどのオブジェクトが複数の責任を持つことができるため、悪いことです。

フレームワークを開始する前に、次のことを確認することをお勧めします:SOLID

ここで質問に戻ります。値を取得するために__getを使用する場合は、値を設定するために__setを使用することもできます。

__constructメソッドは、オブジェクトの唯一の目的を達成するために必要なすべてのデータでオブジェクトを初期化できるようにするためにあります。__constructを回避することはちょっとばかげており、目的を打ち破ります。依存性逆転が実際に何であるかを確認し、それを理解するために、SOLIDのDに注意を払うことをお勧めします。

__setを使用すると、インターフェイスなどをタイプヒントする機能が完全に失われます。したがって、フローがあまり明確に定義されておらず、割り当てが魔法を介してバックで行われるため、コードは非常にバグが多く、追跡が非常に困難になる可能性があります。また、使用しようとしているアーキテクチャが間違っている他の100万の理由を思い付くことができますが、それはまた別の機会に残しておきます。

于 2012-12-30T15:36:01.650 に答える