将所有参数传递给另一个函数

时间:2009-06-01 18:56:18

标签: php syntax

我有两个这样的功能:

function mysql_safe_query($format) {
    $args = array_slice(func_get_args(),1);
    $args = array_map('mysql_safe_string',$args);
    $query = vsprintf($format,$args);
    $result = mysql_query($query);
    if($result === false) echo '<div class="mysql-error">',mysql_error(),'<br/>',$query,'</div>';
    return $result;
}

function mysql_row_exists() {
    $result = mysql_safe_query(func_get_args());
    return mysql_num_rows($result) > 0;
}

问题是第二个函数不起作用,因为它将args作为数组传递给第一个函数,当它将它们视为不同的参数时。有没有办法解决这个问题,最好不要修改mysql_safe_query

3 个答案:

答案 0 :(得分:23)

如何使用:

$args = func_get_args();
call_user_func_array('mysql_safe_query', $args);

答案 1 :(得分:7)

N.B。在PHP 5.6中,您现在可以执行此操作:

function mysql_row_exists(...$args) {
    $result = mysql_safe_query(...$args);
    return mysql_num_rows($result) > 0;
}

此外,对于未来的读者,不推荐使用mysql_ * - 请勿使用这些功能。

答案 2 :(得分:0)

根据具体情况,以下内容可能对您有用,可能会更快一些。

function  mysql_safe_query($format) {
    $args = func_get_args();
    $args = is_array($args[0]) ? $args[0] : $args; // remove extra container, if needed
    // ...

现在允许这两种类型的调用,但如果您的第一个值应该是一个实际的数组,则可能会出现问题,因为它会以任何方式解压缩。

您还可以检查根数组的长度,因此如果有其他元素,可能不会解压缩,但如上所述:它通常不是“干净”,但可能有用且快速: - )