在php函数中使用多个数组作为可选参数的最佳方法

在php函数中使用多个数组作为可选参数的最佳方法,php,mysql,pdo,Php,Mysql,Pdo,我有一个具有以下标头的函数(简单pdo包装类的一部分): 函数选择($table\u name,$fields=[],$where=[]) 当我有一个where子句,但我想使用字段的默认值时,这会很尴尬,就像在这样的调用中: $where = array( 'Username' => $username, 'Password' => $encrypted_password ); // Select all fields from User

我有一个具有以下标头的函数(简单pdo包装类的一部分):

函数选择($table\u name,$fields=[],$where=[])

当我有一个where子句,但我想使用字段的默认值时,这会很尴尬,就像在这样的调用中:

  $where = array(
    'Username'    =>  $username,
    'Password'    =>  $encrypted_password
  );

  // Select all fields from User with the where clause above
  $STMT = $dbpdo->select("User", [], $where);`
这只是一个例子来说明这个问题。在php中使用这种结构最优雅的方式是什么?理想情况下,我希望使用如下呼叫:

$dbpdo->select(“用户”,$where)

$dbpdo->select(“用户”,$fields,$where)

您可以使用
func\u get\u args()
func\u num\u args()
以不同的方式处理对函数的两个参数和三个参数调用,但我不建议这样做,因为这可能会使您的函数让其他人难以使用

我个人认为,
$dbpdo->select(“User”、[]、$where)很好

您也可以考虑交换$WORD字段和$字段参数,如果$field将有默认值/空值。

您可以使用<代码> FoeSuffGigAgScript()/<代码>和FuffyNoMuthAgScript()/Cux>以不同的方式处理两个参数和三个参数调用,但我不建议这样做,因为这可能会使您的功能让其他人难以使用

我个人认为,
$dbpdo->select(“User”、[]、$where)很好


您也可以考虑交换$WORD字段和$field参数,如果$field将有默认值/空值。

感觉有一点基于意见的……,我可能会去找<代码> $PDO->表(“用户”)->选择(“用户名,密码”)->(“a”)…… Hi @安得烈,它是“解决这个问题的不同方法”。“这是个问题。关于您的解决方案,这是一个很好的调用,但是在这个特定的情况下,我需要使用一个单独的类。另外,pdo案例是一个更广泛的例子,也就是说,有几个数组作为参数,以及如何以优雅的方式处理它们。谢谢如果只使用两个参数来调用它,那么它如何知道第二个参数是
$fields
还是
$where
?这就是问题@Barmar的全部要点。有几种方法可以实现这一点,我想知道我的同事们以前使用过哪些方法/阅读过哪些方法只有在可选参数的类型不同时才能真正做到这一点。然后您可以测试参数的类型,以确定提供了哪一个参数,以及哪一个参数应该获得默认值。感觉有点基于观点…,我可能会选择
$pdo->table(“user”)->select(“username,password”)->where(“a”)…“
Hi@Andrew这更像是解决此问题的不同方法。”“这是个问题。关于您的解决方案,这是一个很好的调用,但是在这个特定的情况下,我需要使用一个单独的类。另外,pdo案例是一个更广泛的例子,也就是说,有几个数组作为参数,以及如何以优雅的方式处理它们。谢谢如果只使用两个参数来调用它,那么它如何知道第二个参数是
$fields
还是
$where
?这就是问题@Barmar的全部要点。有几种方法可以实现这一点,我想知道我的同事们以前使用过哪些方法/阅读过哪些方法只有在可选参数的类型不同时才能真正做到这一点。然后您可以测试参数的类型,以确定提供了哪一个参数,以及哪一个参数应该获得默认值。是的,我认为这也很好,我在几个不同的php框架中见过这种构造,但我想知道是否有更好的方法。谢谢你的输入:)我接受你的答案,因为你告诉我func_get_args(),我发现它在将来会很有用。谢谢是的,我认为这也很好,我在几个不同的php框架中见过这种构造,但我想知道是否有更好的方法。谢谢你的输入:)我接受你的答案,因为你告诉我func_get_args(),我发现它在将来会很有用。谢谢