与非必需方法的接口


Interface with not-required methods

有没有办法在接口中指示可选方法(这样合约只指示要给出的参数的数量/类型)?

请对问题多一点了解和见解,并指出解决方案?例如,请参阅此讨论:Java 接口中的可选方法

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

prePersist()
preUpdate()
postPersist()
postUpdate()

等。

现在,在重构时,由于实体(要持久化的对象)太多,我决定将这些方法的各个部分拆分为单独的类。

但是,并非所有人都需要全部预-...和帖子-...方法。我需要确保他们被赋予适当数量和类型的参数。如何在 PHP 中做到这一点?

No.接口的整个思想是拥有一个保证方法存在的契约。

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

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

像这样:

interface MyInterface {
  public function method1();
  public function method2();
}

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

abstract class Base implements MyInterface {
    public function method1() {
       // dummy
    }
    public function method2() {
       // dummy
    }
}

然后:

class Optional extends Base {
   // method1 is not overridden, so Base' implementation applies
   public function method2() {
     // something here
   }
}

请在此处查看示例:

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

我找到了一个引入弱接口的有趣库。然而,我认为让它与教义一起工作并不容易。

在阅读了您的评论和互联网之后,我决定为应用程序设计选择另一种解决方法。

我创建了一个包含所有(必需和可选)方法的单一接口。增加接口数量以实现一个简单的任务(特别是在提到的情况下),我认为这是一种非常糟糕的方法。这是因为我相信类和接口的想法是将连接的东西保持在一起,而不是"人为地"将它们拆分成单独的"容器"。 (例如,想想PHP中的POPO/Java中的POJO)。

现在,所有

类都需要实现所有潜在的方法,但其中一些可能是空的,或者抛出异常,如上面给出的链接讨论所示,或者 GolezTrol 在他的评论中指出。无论如何,感谢您的关注。