我正在阅读一篇关于 OOP、关联、组合、聚合等关系的文章。有些内容令人困惑,而且我不断在网上找到相互矛盾的信息,所以我希望有人能对此有所启发。
因此,在 PHP 中,我们将以下代码称为组合,并且许多文章/教程指出使用组合而不是继承。
class A
{
}
class B
{
public function __construct(protected A $a)
{
}
}
Run Code Online (Sandbox Code Playgroud)
读了几篇关于组合和聚合的文章后,似乎上面实际上是聚合而不是组合的示例,因为在组合中,类 A 的对象不能离开类 B 而存在,所以当类 B 的对象被销毁时,该对象A类的也应该被销毁。上面代码中的情况显然不是这样,因为类 A 的对象可以存在于类 B 之外,因此它的生命周期不依赖于类 B。
以下是组合的示例:
class B
{
public A $a;
public function __construct()
{
$this->a = new A();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,根据我的理解,聚合意味着A类的对象可以存在于B类之外,而组合意味着A类的对象的生命周期依赖于B类并且不能存在于B类之外。
我的理解正确吗?