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

发布于 2024-11-29 19:53:10 字数 800 浏览 0 评论 0原文

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

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) {
        ...
    }
}

I want to be able to declare an abstract function in an parent class, with an unknown number of arguments:

abstract function doStuff(...);

and then define an implementation with a set of hinted arguments:

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

The best approach I've got so far is this,

abstract function doStuff();

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

But every time the function is called, I get a bunch of 'missing argument' warnings because of the hints. Is there a better way?

Edit: The question's wrong, please don't waste your time answering. The following is what I was looking for, and it seems to work without warnings.

abstract class Parent {
    abstract function doStuff();
}

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

追风人 2024-12-06 19:53:10

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

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

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

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

In PHP 5.6 and later, argument lists may include the ... token to denote that the function accepts a variable number of arguments.

You can apply this to an abstract class as follows:

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

The arguments will be passed into the given variable as an array.

所谓喜欢 2024-12-06 19:53:10

根据评论

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

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

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

abstract public function foo ($args);

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

According the comment

I specifically want multiple, named arguments as it makes the code more readable.

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

If you want to pass an arbitrary number of values, use arrays

abstract public function foo ($args);

You should avoid "unknown number of arguments", because it makes things more difficult, then necessary: method signatures in interfaces as well as abstract methods should give the user a hint, how the method will work with any implementation. Its an important part, that the user shouldn't need to know anything about the implementation details. But when the number of arguments changes with every implementation, he must know, how the concrete methods are implemented.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文