Передать все аргументы другой функции - PullRequest
15 голосов
/ 01 июня 2009

У меня есть две функции, подобные этой:

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;
}

Проблема в том, что вторая функция не будет работать, потому что она передает аргументы первому в виде массива, когда она ожидает их как различные параметры. Есть ли способ обойти это, желательно без изменения mysql_safe_query?

Ответы [ 3 ]

23 голосов
/ 01 июня 2009

Как насчет использования:

$args = func_get_args();
call_user_func_array('mysql_safe_query', $args);
7 голосов
/ 15 сентября 2015

N.B. В PHP 5.6 теперь вы можете сделать это:

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

Кроме того, для будущих читателей mysql_ * устарела - не используйте эти функции.

0 голосов
/ 14 февраля 2014

В зависимости от ситуации, следующее может также работать для вас и может быть немного быстрее.

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

, который теперь допускает оба типа вызовов, но может быть проблематичным, если ваше первое значение должно быть фактическим массивом , поскольку оно будет распаковано в любом случае. *

Вы можете дополнительно проверить длину вашего корневого массива, чтобы он не мог быть распакован, если есть другие элементы, но, как уже упоминалось: он не совсем "чистый" в целом, но может быть полезным и быстрым : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...