我有一个父类A
和一个子类B
。我现在的目标是初始化content
(A
的属性)。只有B
知道应该进入A::content
内的值。
class A
{
protected $m;
protected $n;
protected $p;
protected $content;
public function __construct() {
$this->init();
$b = new B;
$this->content = $b->getContent();
}
private function init() {
$this->m = 'Nobody';
$this->n = 'is';
$this->p = 'like';
}
public function getContent() {
return $this->content;
}
}
class B extends A
{
protected $x;
public function __construct() {
$this->init();
$this->content = $this->m.' '.$this->n.' '.$this->p.' '.$this->x.' (according to '.$this->x.')';
}
private function init() {
$this->x = 'Donald Trump';
}
}
$a = new A;
echo $a->getContent();
在我的项目中,我有一些类 - 比方说B,C,D(它们在上面的代码中看起来像B
)。它们都有一个共同点:它们需要A
的变量和方法来设置A::content
的值。
我现在的问题是:这是实现目标的“好方法”吗?另一种选择可能是不使用继承,而是将A
的实例注入B
的构造函数......或者其他替代方案?
编辑: 好吧......看起来我无法让自己清楚。不幸的是,我的英语不够好,无法让我的观点更清晰。 我是OOP的新手,我并没有想要实现所有的S.O.L.I.D.原则。我正在努力的是要理解 我在哪里? 2.我想从哪里来? OOP怎样才能让我到达那里?
编辑: 在我的实际项目中,我正在实例化父代(我的代码的最后两行)。父母决定(通过解析$ _GET)实例化哪个孩子:B,C或D
我通过更改B
的构造函数来解决问题...感谢@ A.P.的提示
public function __construct() {
parent::init();
$this->init();
$this->content = $this->m.' '.$this->n.' '.$this->p.' '.$this->x.' (according to '.$this->x.')';
}
答案 0 :(得分:1)
贝娄是我纠正你做你想做的事。但是你不能创建一个A类并期望它从B类(这是一个孩子)获取数据 但是您可以从B类
访问A类的构造函数 class A
{
protected $m;
protected $n;
protected $p;
protected $content;
public function __construct() {
$this->init();
}
private function init() {
$this->m = 'Nobody';
$this->n = 'is';
$this->p = 'like';
}
public function getContent() {
return $this->content;
}
}
class B extends A
{
protected $x;
public function __construct() {
parent::__construct();
$this->init();
$this->content = $this->m.' '.$this->n.' '.$this->p.' '.$this->x.' (according to '.$this->x.')';
}
private function init() {
$this->x = 'Donald Trump';
}
public function getContent() {
return $this->content;
}
}
$B = new B;
echo $B->getContent();