抽象类的动态属性

时间:2013-11-08 14:14:12

标签: php abstract-class

我的问题是我希望在抽象类公共属性中拥有动态值(类的实例)。

我想在变量中存储一个不允许的实例。

// 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();
    }
}

我需要这是全球性的。可悲的是,抽象类不能有理想的构造函数......而且魔术方法也不是解决方案,因为系统在运行时定义了类变量,所以未定义的变量也会遇到魔术方法......

2 个答案:

答案 0 :(得分:1)

依赖注入模式优雅地解决您的问题。检查GitHub上的Pimple是否具有极简但有效的解决方案,或使用symfony2依赖注入组件。

Pimple on GitHub

使用依赖注入容器可避免耦合,或者可以传递接口而不是类。

答案 1 :(得分:0)

Well Dependency Injection可以解决您的问题

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