想象一下,您有一个从数据库表中选择数据的函数,使用类似以下查询:
select count(id), sum(amount) from payments group by amount;
然后它将结果传递给另一个函数,该函数循环遍历结果并返回一个数组,数组中的每个元素都引用结果中的一行。例如:
private function packageResults(array $results)
{
$ret = [];
foreach ($results as $result) {
// add $result['sum'] and $result['count'] to something, then add it to the $ret array
}
return $ret;
}
现在,如果在循环中,我foreach
将结果添加到关联数组中,或者然后StdClass
将其添加到关联数组)。我的意思是,由于这两种数据类型都是自由格式的,这意味着它们的键/属性在任何地方都没有记录,使用我的代码的人首先必须转储输出才能知道这个函数返回什么。$ret
foreach
StdClass
我可以用什么来告诉用户(和他们的 IDE)我返回的数据的结构是什么,这样他们就不必挖掘我的代码来找到它?数据传输对象是为这些东西制作的吗?我正在考虑数据传输对象,因为它们是具有自己属性的类,这可以用来知道我的函数究竟返回了什么。但是,从软件设计的角度来看,我不确定这是否是正确的方法。