2014-10-15 3 views
0

У меня есть функция, которая всегда вызывается так:Как передать переменный список аргументов в PHP

old_function(sprintf("Some arbitrary data %d, %s, %f\n", $i, $s, $f)); 

возможно ли это в PHP, чтобы сделать функцию, которая сочетает в себе эти к функциям

new_function("Some arbitrary data %d, %s, %f\n", $i, $s, $f); 

в начале new_function, переменный список аргументов функции должен быть проанализирован и передан Sprintf внутренне:

function new_function(/* variable argument list */) 
{ 
    $string = sprintf(/* variable argument list */); 
    return old_function($string); 
} 

Возможно ли это на PHP?

ответ

3

Вы можете использовать func_get_args() & call_user_func_array() для этого:

function new_function() 
{ 
    // get all function arguments 
    $args = func_get_args(); 
    // run the function "sprintf" with the given arguments 
    $string = call_user_func_array("sprintf", $args); 
    return old_function($string); 
} 
0

Пожалуйста, смотрите в func_get_args() метод. Которые могут извлекать аргументы переменной длины.

+0

Это хорошо, но это не говорит мне, как на самом деле передать аргументы Sprintf –

2

Начиная с PHP 5.6, вы можете попробовать использовать Variadic Functions через оператора .... Эта новая функция позволяет встроенную поддержку передачи списков аргументов переменной длины в любую функцию.

попробовать что-то вроде этого:

public function new_function(...$params) { 
    $string = call_user_func_array("sprintf", $params); 
    return old_function($string); 
} 
Смежные вопросы