参见英文答案 > PHPDoc for variable-length arrays of arguments 7个
当数组的元素是方法的参数时,记录数组元素的最佳方法是什么?例如,使用PHPDoc标头,我可能会有类似的东西:
@param array $data
这不告诉我的是数组中哪些元素是必需的,什么是可选元素.我想这应该在方法的解释中.就像是:
array: $data
============
int $id Required
name $string Required
town $string Optional
解决方法:
如果你有一个复杂的数组,每个成员都有约束,我就不会使用匿名数组,而是使用定义良好的对象.使用数组,你永远无法确定它是什么,这有点像在例如传递“对象”. Java,你很少会认为这是一个不错的选择.
但是,如果数组包含某些类型的对象(如here所述),则可能会略微提示,但这对您的问题不是一个非常好的答案.
如果您确实需要将参数作为数组,则可以按照方法描述中的方式对其进行记录;但是,如果使用对象作为参数,则在现代IDE(IntelliSense等)中可以获得额外的支持.
编辑:我的意思是,对我来说问题是“为什么我要使用匿名数组而不是自定义类型” – 除了简单性(如果你维护和扩展你的代码,这将在以后作为技术债务适得其反),我无法想到一个原因,特别是与使用用户定义类型(自编文档代码,可见约束和标准方法明确等)相比所获得的原因.
如果您只需要转储数据,则可能需要使用简单的数组,但由于您已经在考虑可选和必需的键,因此会为用户定义的类型进行尖叫.
EDIT2:关于你是否已经有一个数组作为源的评论:我不确定你是否需要将它作为数组传递或者在收到数组后立即执行“映射”操作(例如,作为$_POST或as从某些第三方库或PHP内部函数返回值等).
我想有人可能会说,解释由视图生成的数据(例如,POST数据的HTML表单)不是模型的业务,而是控制器相应地对输入做出反应并在适当的状态下传输模型的能力.我的意思是你可以做这样的事情,如果你收到例如数组为$_POST:
$customer = new Customer();
$customer->setId($_POST['id']);
$customer->setName($_POST['name']);
$customer->setTown($_POST['town']);
并在您访问$customer时立即处理错误,例如如果未设置名称则抛出异常(即$_POST [‘name’]为空或等).这样,您可以使用源数组来调用对象上的setter,而不是将数组传递给像Customer :: buildByHttpPostData(array $data)这样的工厂,从而委派视图细节的知识(HTML输入标签的名称等).
底线是,没有“标准”方式来声明必需或可选的数组键,当然你可以在方法描述中描述这些约束,但也许你可以通过保持支持的方式来解决这个问题,比如PHPDoc对setter或getter的注释.
当然,可能有更好的方法来解决问题,也许有人想出一个更好的答案如何处理它.