将有限数量的变量值传递到方法中的最佳实践

时间:2012-10-05 02:48:10

标签: php

我正在为联系人管理创建一个课程,我很好奇是否有人有任何创意可以传递选项,以便通过MySQL中的ORDER BY对某些列进行排序。

有5列。 ID,名字,Lasname,电话号码,电子邮件。

所有这些都需要是可升序的升序和降序。显而易见的答案就是传入一个字符串,例如“firstname DESC” - 但似乎有点打开,并希望使该类更具限制性。

有什么想法吗?

1 个答案:

答案 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'));