【问题标题】:PHP, OOP, Different formulationPHP,OOP,不同的公式
【发布时间】:2012-06-01 15:15:15
【问题描述】:

我正在研究 AbstractInterface 之间的区别,我读了一些句子 说

子类只能扩展一个抽象(或任何其他)类, 而一个接口可以扩展或一个类可以实现多个 其他接口。

我理解他所说的“子类只能扩展一个抽象(或任何其他)类”,他的意思是:

class first
{
    public function Search()
    {
        return 'Hellow';
    }
}

abstract class first2 extends first
{

}

class second extends first2
{   

}

$ob = new second();
echo $ob->Search();

但是,我不明白他句子的其余部分,他说,“而一个接口可以扩展,或者一个类可以实现多个其他接口。”

有人可以解释他的最后一句话并添加代码示例吗? 谢谢大家,祝您有愉快的一天。

【问题讨论】:

标签: php oop class interface abstract


【解决方案1】:

你可以实现多个接口

interface C {
  public function method1();
}

interface D {
  public function method2();
}

class A implements C,D {

   //implement from interface C
   public function method1() {

   }
   //implement from interface D
   public function method2() {

   }
}

在这里,您需要实现接口 C 和 D 的方法。您还可以在接口内扩展接口,就像普通类一样。

interface D extends C{}

当您需要一些常用方法时,它很有用。因此,您将“模式”写入接口,您希望基类实现哪些方法。

虽然 abstract 是单个扩展类,但您不能为其创建实例,只能扩展。当您想要一些具有通用功能的基类或稍后应该实现的抽象方法时,它会很有用。

您可以随时在php.net - interfaces阅读更多内容

【讨论】:

  • 谢谢Alickus,我现在明白了祝你有美好的一天。
  • 基类几乎总是糟糕的设计。继承的想法不是在某种 Blob/God 类中收集常用功能。继承的想法是有一些定义良好的超类,然后在子类中有特殊情况/变体。
  • 是的,Blob 类是邪恶的,我不是在谈论它,有时当您需要通用功能时,请以 ex 为例。 MVC 抽象模型,控制器类将有共享的并具有共同功能的方法。继承的想法也是避免代码重复。更不用说扩展你的代码了。
  • 一般情况下最好favor composition over inheritance
猜你喜欢
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多