0

私は連絡先管理用のクラスを作成していORDER BYます.MySQLで特定の列をソート可能にするオプションを渡すための創造的なアイデアを誰かが持っているかどうか知りたいです.

5つの列があります。ID、ファーストネーム、姓、電話番号、電子メール。

これらはすべて、昇順および降順でソート可能である必要があります。明らかな答えは、たとえば「firstname DESC」のような文字列を渡すことですが、少し開くようで、クラスをもう少し制限したいと考えています。

何か案は?

4

1 に答える 1

1

最も型安全な方法は、特定の値のみを保持できるオブジェクトを使用することです。

function getUser(UserSortOption $sortOrder) {
    ...
    $sql .= $sortOrder->getField() . $sortOrder->getDirection();
    ...
}

getUser(new UserSortOption(UserSortOption::FIRSTNAME, UserSortOption::DESC));

厳密な型指定と列挙のすべての利点を取得します。関数の引数ごとに個別のクラスを定義、テスト、インクルードする必要があるのは少しやり過ぎかもしれません。

それ以外の場合は、関数内を確認する必要があります。

function getUser(array $sort) {
    $sortField = key($sort);
    $sortDirection = current($sort);

    if (!in_array($sortField, array('Firstname', ...))) {
        throw new InvalidArgumentException("Invalid value $sortField for sort parameter");
    }

    ...
}

getUser(array('Firstname' => 'desc'));
于 2012-10-05T03:03:59.250 に答える