小编Fuz*_*uze的帖子

PHP 中的组合与聚合

我正在阅读一篇关于 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类之外。

我的理解正确吗?

php oop

3
推荐指数
1
解决办法
1405
查看次数

标签 统计

oop ×1

php ×1