使用(..$ Array)传递数组作为函数's参数


Passing an Array As A Function's Parameters Using (...$array)

我试图通过一个数组作为一个函数的参数,我有一些麻烦。函数如下:

$stmt->bind_param();

我正在研究这个,发现你可以使用这个:

$stmt->bind_param(...$values);

这在我的开发服务器(PHP 7.0.0)上运行良好,但当我将其输入到另一个服务器(PHP 5.*)时,我得到了以下错误:

语法错误,unexpected '。',期待')'

经过进一步研究,我试着:

call_user_func_array(array($stmt, 'bind_param'), $values);

并得到这个错误:

call_user_func_array()期望参数1是一个有效的回调,第一个数组成员不是一个有效的类名或对象

我知道我可以输入参数,一切都会很好,但我需要函数接受任意数量的参数(这就是导致函数思想的原因)。

函数如下:

function updateId($id, $data){
    $mysqli = dbConnect::connect();
    $sm=array();
    $values=array();
    $dataString = array();
    foreach($data as $column=>$value){
        $dataString[] = ($column .'= ?');
        $values[] = $value;
        if(gettype($value)==="string"){
            $sm[] = 's';
        }elseif(gettype($value)==="integer"){
            $sm[] = 'i';
        }elseif(gettype($value)==="double"){
            $sm[] = 'd';
        }else{
            $sm[] = 'b';
        }
    }
    $dataString = implode(', ',$dataString);
    $sm = implode('',$sm);
    $prepString = "UPDATE $this->tablename SET $dataString WHERE id=$id";
    array_unshift($values, $sm);
    $stmt = $mysqli->prepare($prepString);
    $stmt->bind_param(...$values);
    $stmt->execute() or die($stmt->error);
    $stmt->close();
    $mysqli->close();
}

您得到一个错误,因为您传递非引用值给bind_param。可以使用call_user_func_array,但是必须确保传递的值是引用。你可以这样做:

改变:

$values[] = $value;

:

$values[] = &$data[$column];

并且(就像你已经做过的那样)改变这个:

$stmt->bind_param(...$values);

这:

call_user_func_array(array($stmt, 'bind_param'), $values);