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

Php 将有限数量的变量值传递到方法中的最佳实践,php,Php,我正在为联系人管理创建一个类,我很好奇是否有人有任何创造性的想法可以通过MySQL中的orderby来传递选项,使某些列可以排序 共有5列。身份证,名字,姓氏,电话号码,电子邮件 所有这些都需要进行升序和降序排序。显而易见的答案是传入一个字符串,例如“firstname DESC”——但似乎有点开放,希望使类更具限制性 有什么想法吗?最安全的方法是使用只能保存某些值的对象: function getUser(UserSortOption $sortOrder) { ... $sq

我正在为联系人管理创建一个类,我很好奇是否有人有任何创造性的想法可以通过MySQL中的
orderby
来传递选项,使某些列可以排序

共有5列。身份证,名字,姓氏,电话号码,电子邮件

所有这些都需要进行升序和降序排序。显而易见的答案是传入一个字符串,例如“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'));

听起来像是应该在客户端用js做的理想事情,比每次检索所有数据都要快得多。这是不可能的。这些数据集将非常庞大。order by需要是MySQL查询的一部分。有多大?我使用60k行表执行此操作,分页是js to的一部分。但是,如果不这样做,只需将标题转换为链接并在URL中传递var,它可能有数百万行。不管怎么说,即使是60k也是非常重要的。我不能指望我们的客户不处理它。必须在服务器端完成。好的,没关系,现在您知道要限定将来的问题:-0谢谢,选项2看起来像我们要使用的。