【问题标题】:How to create a function with optional variables in PHP [duplicate]如何在 PHP 中创建带有可选变量的函数 [重复]
【发布时间】:2016-06-02 10:17:24
【问题描述】:

我需要帮助在 PHP 中创建一个接受可选变量的函数。到目前为止,这就是我所做的:

function customFunc($var, $var1){
    global $conn;
    $query = "SELECT * FROM table WHERE col = '{$var}' AND col1 = '{$var1}';";
    $result = mysqli_query($conn, $query);
    return $result;
}

如果我在没有提供$var1 的情况下调用该函数,MySQL 不会返回任何行,即使我们有一些行。

如果没有设置$var1,现在我还需要从 col1 中选择所有内容。我还想扩展函数并包含更多可选变量$var2$var3 等,如下所示:

function customFunc($var, $var1, $var2, $var3){
    global $conn;
    $query = "SELECT * FROM table WHERE col = '{$var}' AND col1 = '{$var1}' AND col2 = '{$var2}' AND col3 = $var3;";
    $result = mysqli_query($conn, $query);
    return $result;
}

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您可以通过为参数声明默认值来获得可选参数,如下所示:

    函数 abc($a, $b, $c = '') { ... }

    如果可能,您应该在最后可能的位置传递可选参数。这是为了确保以后更改功能时不会破坏代码。

    【讨论】:

    • 这是一个不好的例子。没有默认值的参数应该在有默认值的参数之前。你的例子应该是: function abc($b, $a= '', $c = '') { ... }
    • 你是对的。我会更新答案。
    【解决方案2】:

    您需要为参数分配默认值:

    function customFunc($var = null, $var1 = null) {
    }
    

    您必须检查这些默认值是否存在并相应地修改您的查询。

    或者您可以按照 cmets 中的建议使用 func_get_args() 并将这些动态参数映射到这样的列:

    function customFunc() {
        $map = [
            'col1', 'col2', 'col3'
        ];
    
        $where = [];
        $i = 0;
        foreach (func_get_args() as $arg) {
            if (!isset($map[$i])) {
                break;
            }
            $where[]= $map[$i] . '=\'' . $arg . '\'';
            $i++;
        }
    
        if (empty($where)) {
            return null;
        }
    
        $query = 'SELECT * FROM table WHERE ' . implode(' AND ', $where) . ';';
        $result = mysqli_query($conn, $query);
        return $result;
    }
    

    【讨论】:

      【解决方案3】:

      试试这个:

      function customFunc($var1=null, $var2=null, $var3=null) {
      $query = "SELECT * FROM Table;
      if ($var1) {
          $query .= " WHERE col1 ='$var1'";
      }
       if ($var2) {
          $query .= " AND col2='$var2'";
      }
       if ($var3) {
          $query .= " AND col3='$var3'";
      }
      return mysql_query($query);
      

      }

      【讨论】:

      • 感谢家人。这行得通。
      • 感谢家人。这行得通。
      猜你喜欢
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 2015-04-08
      • 1970-01-01
      • 2015-02-28
      • 2012-03-21
      相关资源
      最近更新 更多