我正在为联系人管理创建一个类,我很好奇是否有人有任何创意可以传递选项以使某些列ORDER BY
在 MySQL 中可排序。
有 5 列。ID、名字、姓氏、电话号码、电子邮件。
所有这些都需要是可排序的升序和降序。显而易见的答案就是传递一个字符串,例如“firstname DESC”——但似乎有点打开,并且想让类更具限制性。
有任何想法吗?
我正在为联系人管理创建一个类,我很好奇是否有人有任何创意可以传递选项以使某些列ORDER BY
在 MySQL 中可排序。
有 5 列。ID、名字、姓氏、电话号码、电子邮件。
所有这些都需要是可排序的升序和降序。显而易见的答案就是传递一个字符串,例如“firstname DESC”——但似乎有点打开,并且想让类更具限制性。
有任何想法吗?
最安全的方法是使用只能保存某些值的对象:
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'));