我正在为联系人管理创建一个课程,我很好奇是否有人有任何创意可以传递选项,以便通过MySQL中的ORDER BY
对某些列进行排序。
有5列。 ID,名字,Lasname,电话号码,电子邮件。
所有这些都需要是可升序的升序和降序。显而易见的答案就是传入一个字符串,例如“firstname DESC” - 但似乎有点打开,并希望使该类更具限制性。
有什么想法吗?
答案 0 :(得分: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'));