如何强制一组类要求具有可变参数的方法

时间:2018-11-20 14:36:05

标签: php

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

例如(这是行不通的,但本质上是我想做的事)

摘要集

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能够提示所需的参数。

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

2 个答案:

答案 0 :(得分:1)

<form action="https://liveformhq.com/form/911331a2-0d5e-4fbf-abb0-******" method="POST" accept-charset="utf-8" id="contact-form"> <input type="email" placeholder="Email..." id="email" name="email" /> <textarea rows="4" cols="50" placeholder="Message..." id="message" name="message"></textarea> <div class="actions"><button type="submit">Send</button></div> </form>中,通过添加一个有意义的默认值使BoxCollection::add自变量成为可选参数。这样您就不会出错。 如果在另一个类中,您只想给此方法使用color参数,请为id参数提供默认值,也许name可以。

答案 1 :(得分:0)

使用...运算符(自php 5.6起可用)

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

那么根本就不需要更改具体的类