首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接口与不需要的方法进行交互。

接口与不需要的方法进行交互。
EN

Stack Overflow用户
提问于 2015-01-11 18:58:44
回答 5查看 11.3K关注 0票数 2

是否有一种方法可以指示接口中的可选方法(因此契约只表示要给出的参数的数量/类型)?

请对这个问题给予更多的理解和洞察力,并给出解决方案。例如,请参阅下面的讨论:Java接口中的可选方法

在应用程序中,我使用连接到持久性(Doctrine)的侦听器。所以我用了一些方法:

代码语言:javascript
复制
prePersist()
preUpdate()
postPersist()
postUpdate()

等。

现在,在重构时,由于有太多的实体(要持久化的对象),我决定将这些方法的部分分割成不同的类。

然而,并不是所有的人都需要.然后.方法。我需要确保给他们适当的数量和类型的论点。如何在PHP中做到这一点?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-01-11 19:01:32

不是的。接口的整个概念是有一个保证方法存在的契约。

但是类可以实现多个接口,因此您可以定义包含该方法的不同接口,而不是将该接口添加到没有该方法的类中。

票数 12
EN

Stack Overflow用户

发布于 2015-01-11 19:41:48

接口不能有可选的方法。这就是界面背后的概念。但是,如果您需要一些可选的东西,那么我建议另外创建您的接口的默认实现,然后您需要的所有类都会扩展。通过这种方式,所有这些类都将实现接口,并且您还可以覆盖所选的方法,并具有可选行为。

就像这样:

代码语言:javascript
复制
interface MyInterface {
  public function method1();
  public function method2();
}

然后,基类实现了接口的方法(我将其抽象为不允许直接使用):

代码语言:javascript
复制
abstract class Base implements MyInterface {
    public function method1() {
       // dummy
    }
    public function method2() {
       // dummy
    }
}

然后:

代码语言:javascript
复制
class Optional extends Base {
   // method1 is not overridden, so Base' implementation applies

   public function method2() {
     // something here
   }
}
票数 2
EN

Stack Overflow用户

发布于 2017-09-14 00:40:07

请参阅这里的例子:

代码语言:javascript
复制
interface Workable
{
    public function work();
}

interface Feedable
{
    public function eat();
}

interface Employee extends Feedable, Workable
{
}

class Human implements Employee
{
    public function work()
    {
        // ....working
    }

    public function eat()
    {
        //.... eating in lunch break
    }
}

// robot can only work
class Robot implements Workable
{
    public function work()
    {
        // ....working
    }
}

来源:https://github.com/jupeter/clean-code-php

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

https://stackoverflow.com/questions/27890873

复制
相关文章

相似问题

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