【问题标题】:How to share code between classes that do not have the same parent?如何在没有相同父级的类之间共享代码?
【发布时间】:2012-10-21 00:50:07
【问题描述】:

我有外部库的 A、B 类,我的 A2 类扩展 A,B2 扩展 B。A2 类和 B2 类的代码完全相同。我可以分享吗?代码做一些工作并调用父函数:

class A2 extends A
{
  function func1($var1, $var2,...)
  {
     ...
     ... Do some job
     ...
     return parent::func1($var1, $var2,...);
  }
  function func2($var1, $var2,...)
  {
     ...
     ... Do some job
     ...
     return parent::func2($var1, $var2,...);
  }
  ...
  ...
  ...
}

class B2 extends B
{
  function func1($var1, $var2,...)
  {
     ...
     ... Do some job
     ...
     return parent::func1($var1, $var2,...);
  }
  function func2($var1, $var2,...)
  {
     ...
     ... Do some job
     ...
     return parent::func2($var1, $var2,...);
  }
  ...
  ...
  ...
}

我坚持使用 PHP 5.2.x 和 allow_url_include=off(因为客户限制),

【问题讨论】:

  • 你能改变 A 和 B 让它们都扩展同一个类,然后把你的公共代码放在那里吗?
  • 你不能在这里使用 Strategy 吗?也就是说,在 A2 和 B2 都将使用(通过聚合或通过 DI)的其他类中定义此重叠代码?
  • 问题:除了方便调用它们的方法之外,还有什么理由让 A2 和 B2 分别扩展 A 和 B?例如,您是否要将 A1 视为 A?
  • PHP 5.4 和 Traits... 必须热爱传统工作。让你流汗。

标签: php php-5.2


【解决方案1】:

如果 A2 和 B2 完全相同相同,则将其转换为自己的类,而不是让它扩展现有的类。然后,您可以将该类的对象传递给实际需要使用它的任何其他对象。

另请参阅:Strategy Pattern

【讨论】:

    【解决方案2】:

    从另一个方向来看这似乎是个好主意。 A 类和 B 类具有不同的代码,但 A2 和 B2 具有相同的代码,因此我们将那段代码称为 C。您需要的是 A2 和 B2 类,其中 A2 具有 A 和 C 的功能,并且B2 具有 B 和 C 的功能。你能让 C 成为 A 和 B 的超类吗?那你就直接使用这两个类,不用重复代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 2019-11-11
      • 1970-01-01
      相关资源
      最近更新 更多