PHP 将变量数组作为分隔变量访问
PHP access array of variables as separated variables
我试图通过准备好的语句为 select 行编写 class 和方法。
我遇到了一个有趣的问题。
我无法将像 $variables = [$var1, $var2, $var3];
这样的变量数组分配给函数并像 my_function($var1, $var2, $var3);
那样单独使用它们,所以我可以 my_function($variables)
这可能吗?请注意,my_function
不接受数组。
在我的代码中:
所以当我 运行 这个:
$query = "SELECT * FROM books as b where b.id=?";
$result = Query::select($query, 'i', 1);
或者当我 运行 这个:
$query = "SELECT * FROM books as b where b.id=? b.name=?";
$name = 'Sam';
$result = Query::select($query, 'is', 1,$name);
此方法将执行:
public static function select($query, $string_of_types, ...$variables)
{
$mysql = new Mysqli(DB::$servername, DB::$username, DB::$password, DB::$databasename);
$stmt = $mysql->prepare($query);
///////start mess up//////
if(count($variables) == 1)
$stmt->bind_param($string_of_types, $variables[0]);
if(count($variables) == 2)
$stmt->bind_param($string_of_types, $variables[0], $variables[1]);
if(count($variables) == 3)
$stmt->bind_param($string_of_types, $variables[0], $variables[1], $variables[2]);
$stmt->execute();
$result = $stmt->get_result();
return $result;
}
它正在运行,但我知道我走错了路。
我该如何解决这个问题?
如果我以某种神奇的方式删除 $variables
周围的 []
,那么一切都会正常进行。所以我可以写 $stmt->bind_param($string_of_types, $variables);
您正在寻找的是 splat 运算符 (...
),它将数组解压到函数参数列表中:
$stmt->bind_param($string_of_types, ...$variables);
我试图通过准备好的语句为 select 行编写 class 和方法。
我遇到了一个有趣的问题。
我无法将像 $variables = [$var1, $var2, $var3];
这样的变量数组分配给函数并像 my_function($var1, $var2, $var3);
那样单独使用它们,所以我可以 my_function($variables)
这可能吗?请注意,my_function
不接受数组。
在我的代码中:
所以当我 运行 这个:
$query = "SELECT * FROM books as b where b.id=?";
$result = Query::select($query, 'i', 1);
或者当我 运行 这个:
$query = "SELECT * FROM books as b where b.id=? b.name=?";
$name = 'Sam';
$result = Query::select($query, 'is', 1,$name);
此方法将执行:
public static function select($query, $string_of_types, ...$variables)
{
$mysql = new Mysqli(DB::$servername, DB::$username, DB::$password, DB::$databasename);
$stmt = $mysql->prepare($query);
///////start mess up//////
if(count($variables) == 1)
$stmt->bind_param($string_of_types, $variables[0]);
if(count($variables) == 2)
$stmt->bind_param($string_of_types, $variables[0], $variables[1]);
if(count($variables) == 3)
$stmt->bind_param($string_of_types, $variables[0], $variables[1], $variables[2]);
$stmt->execute();
$result = $stmt->get_result();
return $result;
}
它正在运行,但我知道我走错了路。
我该如何解决这个问题?
如果我以某种神奇的方式删除 $variables
周围的 []
,那么一切都会正常进行。所以我可以写 $stmt->bind_param($string_of_types, $variables);
您正在寻找的是 splat 运算符 (...
),它将数组解压到函数参数列表中:
$stmt->bind_param($string_of_types, ...$variables);