首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我可以在PHP中使用多个类来扩展一个类吗?

我可以在PHP中使用多个类来扩展一个类吗?
EN

Stack Overflow用户
提问于 2008-12-10 14:02:57
回答 18查看 285.1K关注 0票数 169

如果我有几个具有所需函数的类,但又想单独存储以便于组织,我是否可以扩展一个类以同时拥有这两个类?

class a extends b extends c

编辑:我知道如何一次扩展一个类,但我正在寻找一种方法,可以使用多个基类立即扩展一个类--你不能在PHP中做到这一点,但如果不求助于class c extends bclass b extends a,应该有办法绕过它。

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2008-12-10 15:18:14

如果你真的想在PHP5.3中伪造多重继承,你可以使用神奇的函数__call()。

这是丑陋的,尽管它从A级用户的角度来看是有效的:

代码语言:javascript
复制
class B {
    public function method_from_b($s) {
        echo $s;
    }
}

class C {
    public function method_from_c($s) {
        echo $s;
    }
}

class A extends B
{
  private $c;
    
  public function __construct()
  {
    $this->c = new C;
  }
    
  // fake "extends C" using magic function
  public function __call($method, $args)
  {
    $this->c->$method($args[0]);
  }
}


$a = new A;
$a->method_from_b("abc");
$a->method_from_c("def");

打印"abcdef“

票数 181
EN

Stack Overflow用户

发布于 2008-12-10 14:12:38

您不能拥有扩展两个基类的类。您不能拥有以下内容:

代码语言:javascript
复制
// this is NOT allowed (for all you google speeders)
Matron extends Nurse, HumanEntity

然而,你可以有一个层次结构,如下所示。

代码语言:javascript
复制
Matron extends Nurse    
Consultant extends Doctor

Nurse extends HumanEntity
Doctor extends HumanEntity

HumanEntity extends DatabaseTable
DatabaseTable extends AbstractTable

诸若此类。

票数 144
EN

Stack Overflow用户

发布于 2011-06-24 18:50:44

您可以使用特征,希望在PHP5.4中可以使用。

特征是PHP等单继承语言中代码重用的一种机制。特征旨在通过使开发人员能够在位于不同类层次结构中的几个独立类中自由重用方法集来减少单一继承的某些限制。特征和类组合的语义以一种方式定义,它降低了复杂性,并避免了与多重继承和混合相关的典型问题。

它们在支持更好的组合和重用方面的潜力得到了认可,因此它们集成在较新版本的语言中,如Perl6、Squeak、Scala、Slate和要塞。特征也被移植到Java和C#。

更多信息:https://wiki.php.net/rfc/traits

票数 65
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/356128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档