1

私の問題は、抽象クラスのパブリック プロパティに動的な値 (クラスのインスタンス) を持たせたいということです。

このように許可されていない変数にインスタンスを格納したい。

// Not allowed
abstract class Abs{
    public $var = new VarClass();
}

// This only works for extended childrens of course, but it should work globally.
class B extends Abs{
    function __construct(){
        $this->var = new varClass();
    }
}

これをグローバルにする必要があります。悲しいことに、抽象クラスは理想的なコンストラクターを持つことができません...また、システムは実行時にクラス変数を定義するため、魔法のメソッドも解決策ではありません。未定義の変数も魔法のメソッドに実行されます...

4

2 に答える 2

1

依存性注入パターンは、問題をエレガントに解決します。最小かつ効率的なソリューションについては、GitHub の Pimple を確認するか、symfony2 依存性注入コンポーネントを使用してください。

GitHub のにきび

依存性注入コンテナーを使用すると、カップリングを回避したり、クラスの代わりにインターフェイスを渡すことができます。

于 2013-11-08T14:22:21.100 に答える
0

まあ依存性注入はあなたの問題を解決することができます

abstract class Abs{
   //...
}


class B extends Abs{
    private $var;
    public function setVarClass(varClass $class){
         $this->var = $class;
    }
 }

 //example
 $classVar = new varClass;
 $b = new B;
 $b->setVarClass($classVar);

これは、少なくとも密結合の問題を解決するための柔軟な方法であり、Object常に参照されることを覚えておいてください。

于 2013-11-08T14:21:45.683 に答える