设置和记录无限参数的正确方法是什么?

时间:2011-09-06 21:08:10

标签: php phpdoc function-declaration

背景 我正在创建一个方法addAll,它将传递给方法的所有值添加到我的类中。这就是我的想法:

public function addAll() {
    if(func_num_args()===0) {
        throw new BadMethodCallException(get_class($this).'::addAll() must have arguments.');
    }

    $args = func_get_args();

    foreach($args as &$arg) {
        $this->add($arg);
    }
}

它很棒。然后我用phpDocumentor记录它:

/**
 * @param mixed ... All of the values to add.
 */

。 。 。但我没有@param的名字,因为坦白说,它不存在。

问题:我如何构建和定义这样的东西?


由于我希望它至少传递了一个值,我想出了这个,但我不确定:

/**
 * @param mixed $value,... All of the values to add.
 */
public function addAll($value) {
    $args = func_get_args();

    foreach($args as &$arg) {
        $this->add($arg);
    }
}

似乎错误,因为永远不会直接使用$value。 。

另外,我已经有add添加一个,所以addAll语义上不应该至少需要两个参数吗?你建议用什么来定义和记录它?

1 个答案:

答案 0 :(得分:0)

答案:使用@example标记。

我也改变了我的设置,似乎是利用PHP提供的最佳方式而不会丧失可用性:

/**
 * @param mixed $values Either an array of values to add, or multiple values
 * @example
 * 
 * $object->add('1');
 * $object->add('1','2');
 * $object->add(array('1','2'));
 * 
 * @return type 
 */
public function add($values=null) {
    if (is_array($values)) {
        return $this->addAll($values);
    } else {
        return $this->addAll(func_get_args());
    }
}