首页 > 解决方案 > 如何强制一组类需要具有可变参数的方法

问题描述

我的应用程序有一组类似的类,它们都需要具有特定名称的方法,但参数的数量是可变的。使用抽象或接口需要扩展/实现类方法使用相同数量的参数。

例如(这不起作用,但本质上是我想要做的)

抽象集合

abstract class Collection
{
  abstract public function add ($id, $name);
}

盒子收藏

class BoxCollection extends Collection
{
  public function add ($id, $name, $color)
  {
    $this->data[] = compact('id', 'name', 'color');
  }
}

形状集合

class ShapeCollection extends Collection
{
  public function add ($id, $name, $edges)
  {
    $this->data[] = compact('id', 'name', 'edges');
  }
}

我知道我可以接受一个关联数组(如果需要的键不存在,可能会检查它并抛出异常)但这对开发人员输入数据时没有帮助,我希望 IDE 能够提示所需的参数。

有没有办法实现这种行为?

标签: php

解决方案


在通过添加一个有意义的默认值使参数成为可选BoxCollection::addcolor那时你不会得到任何错误。如果在另一个类中你只想给id这个方法提供参数,给name参数一个默认值,可能null会做。


推荐阅读