PHP:我可以声明一个具有可变参数数的抽象函数吗?

2022-08-30 22:21:59

我希望能够在父类中声明一个抽象函数,参数数量未知:

abstract function doStuff(...);

然后使用一组提示参数定义一个实现:

 /**
 * @param int $userID
 * @param int $serviceproviderID
 */
static function doStuff($userID, $serviceproviderID) {}

到目前为止,我得到的最好的方法是这样的,

abstract function doStuff();

 /**
 * @param int $userID
 * @param int $serviceproviderID
 */
static function doStuff() {
    $args = func_get_args();
    ...
}

但是每次调用该函数时,由于提示,我都会收到一堆“缺少参数”警告。有没有更好的方法?

编辑:问题有误,请不要浪费时间回答。以下是我一直在寻找的内容,它似乎可以在没有警告的情况下工作。

abstract class Parent {
    abstract function doStuff();
}

/**
* @param type $arg1
* @param type $arg2
*/
class Child extends Parent {
    function doStuff($arg1, $arg2) {
        ...
    }
}

答案 1

在 PHP 5.6 及更高版本中,参数列表可能包含标记,以表示函数接受可变数量的参数。...

可以将其应用于抽象类,如下所示:

abstract class AbstractExample {
    public function do_something(...$numbers);
}

参数将作为数组传递到给定变量中。


答案 2

根据评论

我特别想要多个命名参数,因为它使代码更具可读性。

abstract public function foo ($a, $b=null, $c=null);

如果要传递任意数量的值,请使用数组

abstract public function foo ($args);

你应该避免“未知数量的参数”,因为它使事情变得更加困难,那么是必要的:接口中的方法签名以及抽象方法应该给用户一个提示,该方法将如何与任何实现一起使用。这是一个重要的部分,用户不需要知道任何关于实现细节的信息。但是,当参数的数量随着每个实现而变化时,他必须知道具体方法是如何实现的。


推荐