我的问题是我希望在抽象类公共属性中拥有动态值(类的实例)。
我想在变量中存储一个不允许的实例。
// 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();
}
}
我需要这是全球性的。可悲的是,抽象类不能有理想的构造函数......而且魔术方法也不是解决方案,因为系统在运行时定义了类变量,所以未定义的变量也会遇到魔术方法......
答案 0 :(得分:1)
依赖注入模式优雅地解决您的问题。检查GitHub上的Pimple是否具有极简但有效的解决方案,或使用symfony2依赖注入组件。
使用依赖注入容器可避免耦合,或者可以传递接口而不是类。
答案 1 :(得分: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
。