当数组作为方法的参数时,最好的文档化方法是什么?例如,使用PHPDoc标题,我可能会写出以下内容:
@param array $data
这并没有告诉我数组中哪些元素是必填的,哪些元素是可选的。我想这应该在方法的解释中说明。例如:
array: $data
============
int $id Required
name $string Required
town $string Optional
当数组作为方法的参数时,最好的文档化方法是什么?例如,使用PHPDoc标题,我可能会写出以下内容:
@param array $data
这并没有告诉我数组中哪些元素是必填的,哪些元素是可选的。我想这应该在方法的解释中说明。例如:
array: $data
============
int $id Required
name $string Required
town $string Optional
/**
* @param array $data
*
* @var $data[id] int, required
* @var $data[name] string, required
* @var $data[town] string, required
*/
这是一个使用doctrine和zf2的示例:
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
* @Form\Attributes({"type":"hidden"})
*/
protected $id;
/**
* @ORM\Column(type="string")
* @Form\Type("Zend\Form\Element\Text")
* @Form\Required({"required":"true"})
* @Form\Filter({"name":"StripTags"})
* @Form\Filter({"name":"StringTrim"})
* @Form\Validator({"name":"StringLength", "options":{"min":"5"}})
* @Form\Options({"label":"First name"})
*/
protected $firstName;
回答这个问题没有正式的方法,尝试使用你认为最直观的方式。我做类似的事情:
/**
* @param array $data [ int $id, string $name, string $town ]
*/
然而我不会使用这种符号来表示参数,而是用来表示返回值。在你的情况下,我会将方法参数提取到一个对象中,然后将该对象传递给方法:
/**
* @param User $user
*/
public function myMethod( User $user )
{
//...
}
这是因为User对象将其属性公开为API,以便其他开发人员使用,自我记录代码!
另一种方法是将数组元素分离成参数,如下所示:
/**
* @param int $id
* @param string $name
* @param string $town
*/
public function myMethod( $id, $name, $town )
{
//...
}
三个参数勉强可以接受,但你应该开始寻找重构的方法,就像我的第一个建议。四个参数普遍被认为很混乱,需要进行重构。
$customer = new Customer();
$customer->setId($_POST['id']);
$customer->setName($_POST['name']);
$customer->setTown($_POST['town']);
$_POST ['name']
为空等),则抛出异常。这样,您可以使用源数组调用对象的setter,而不是将数组传递给工厂(如Customer :: buildByHttpPostData(array $data)),从而委托视图细节的知识(HTML输入标记的名称等)。
总之,没有“标准”方法来声明必需或可选数组键,当然您可以在方法描述中描述这些限制,但也许您可以通过保持支持的方法(如setter或getter上的PHPDoc注释)来规避这一点。
当然,可能有更好的方法来解决问题,也许有人会提出更好的答案来处理它。”