我的应用程序有一组类似的类,所有这些类都需要使用具有特定名称的方法,但是参数的数量是可变的。使用抽象或接口要求扩展/实现类方法使用相同数量的参数。
例如(这是行不通的,但本质上是我想做的事)
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能够提示所需的参数。
有没有办法实现这种行为?
答案 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);
}
那么根本就不需要更改具体的类