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

新手上路,请多包涵

如果我有几个具有我需要的功能但想单独存储以进行组织的类,我可以扩展一个类以同时具有这两个功能吗?

class a extends b extends c

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

原文由 atomicharri 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 573
2 个回答

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

尽管从 A 类用户的角度来看,这很丑陋:

 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”

原文由 Franck 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用特征作为基类。然后在父类中使用它们。扩展它。

 trait business{
  function sell(){

  }

  function buy(){

  }

  function collectMoney(){
  }

}

trait human{

   function think(){

   }

   function speak(){

   }

}

class BusinessPerson{
  use business;
  use human;
  // If you have more traits bring more
}

class BusinessWoman extends BusinessPerson{

   function getPregnant(){

   }

}

$bw = new BusinessWoman();
$bw ->speak();
$bw->getPregnant();

现在看看女商人在逻辑上继承了商业和人类两者;

原文由 Alice 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题