使用 (...$array) 将数组作为函数的参数传递
Passing an Array As A Function's Parameters Using (...$array)
我正在尝试将数组作为函数的参数传递,但遇到了一些问题。
这是函数。
$stmt->bind_param();
我正在研究这个,发现你可以使用这个:
$stmt->bind_param(...$values);
这在我的开发服务器 (PHP 7.0.0) 上运行良好,但是当我将它输入到另一个服务器 (PHP 5.*) 时,出现以下错误:
syntax error, unexpected '.', expecting ')'
经过进一步研究,我尝试了:
call_user_func_array(array($stmt, 'bind_param'), $values);
并收到此错误:
call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object
我知道我可以只输入参数并且一切正常,但我需要函数接受任意数量的参数(这就是导致函数想法的原因)。
函数如下:
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);
我正在尝试将数组作为函数的参数传递,但遇到了一些问题。 这是函数。
$stmt->bind_param();
我正在研究这个,发现你可以使用这个:
$stmt->bind_param(...$values);
这在我的开发服务器 (PHP 7.0.0) 上运行良好,但是当我将它输入到另一个服务器 (PHP 5.*) 时,出现以下错误:
syntax error, unexpected '.', expecting ')'
经过进一步研究,我尝试了:
call_user_func_array(array($stmt, 'bind_param'), $values);
并收到此错误:
call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object
我知道我可以只输入参数并且一切正常,但我需要函数接受任意数量的参数(这就是导致函数想法的原因)。
函数如下:
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);