我希望能够在父类中声明一个具有未知数量参数的抽象函数:
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) {
...
}
}
答案 0 :(得分:7)
根据评论
我特别想要多个命名参数,因为它使代码更具可读性。
abstract public function foo ($a, $b=null, $c=null);
如果要传递任意数量的值,请使用数组
abstract public function foo ($args);
你应该避免“未知数量的参数”,因为它使事情变得更加困难,然后是必要的:接口中的方法签名以及抽象方法应该给用户一个提示,该方法如何与任何实现一起工作。它是一个重要的部分,用户不需要知道有关实现细节的任何信息。但是当参数的数量随着每个实现而变化时,他必须知道具体方法是如何实现的。
答案 1 :(得分:6)
在PHP 5.6及更高版本中,参数列表可能包含...
标记,表示该函数接受可变数量的参数。
您可以将它应用于抽象类,如下所示:
abstract class AbstractExample {
public function do_something(...$numbers);
}
参数将作为数组传递给给定变量。