次のクエリのようなものを使用して、データベース テーブルからデータを選択する関数があるとします。
select count(id), sum(amount) from payments group by amount;
次に、結果を別の関数に渡します。この関数は、結果をループして配列を返します。配列内の各要素は、結果の 1 つの行を参照します。例えば:
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) に、返されるデータの構造を伝えるために何を使用すればよいでしょうか? データ転送オブジェクトはこのようなもののために作られていますか? データ転送オブジェクトは独自のプロパティを持つクラスであるため、これを使用して関数が返すものを正確に知ることができます。ただし、これがソフトウェア設計の観点から正しいアプローチであるかどうかはわかりません。