1

我正在研究 CMS,并且正在寻找一种将函数参数列表转换为数组的方法。例如:

function testfunction($param1, $param2){
$string = "Param1: $param1  Param2: $param2";
return $string;
}

$funcname = 'testfunction';
$params = "'this is, parameter 1', 'this is parameter2'";

//This doesnt work, sends both parameters as the first, dont know why.
echo call_user_func($funcname, $params);


//So I want to split the parameter list:
$paramsarray = preg_split('%Complex Regex%', $params);

//And call thusly:
echo call_user_func_array($funcname, $paramsarray);

我不知道在这里使用什么样的正则表达式......我可以用','爆炸,但这会爆炸字符串,数组等中包含的所有逗号......所以我需要一个正则表达式来做到这一点,我很好使用正则表达式,但似乎其中会有很多规则。

4

5 回答 5

2

我想如果你真的想从一个字符串开始(而不是像其他人建议的数组),你可以这样做:

在 PHP 5.3 中:

$params = "'this is, parameter 1', 'this is parameter2'";
$paramsarray = str_getcsv($params, ',', "'");

在 PHP 5.1/5.2 中:

$fp = fopen('php://temp', 'w+');
fwrite($fp, $params);
fseek($fp, 0);
$paramsarray = fgetcsv($fp, 0, ',', "'");

print_r($paramsarray);

...并得到:

Array
(
    [0] => this is, parameter 1
    [1] => this is parameter2
)

...然后使用call_user_func_array.

如果您想使用更复杂的类型(例如:数组或对象),那将是一个真正的挑战。您可能必须使用Tokenizer

于 2011-05-30T19:33:58.663 回答
1

也许您可以为此使用func_get_args ?

另外,我认为 call_user_func 应该这样调用:

    call_user_func('functionName', $param1, $param2);
于 2011-05-30T19:26:34.010 回答
1

$params是(在你的情况下)一个变量,它包含一个 type 的值string。它不是数组或任何其他复杂类型。我假设,你甚至不需要你的%Complex Regex%.

$funcname = 'testfunction';
$params = "'this is, parameter 1', 'this is parameter2'";

foreach ($params as &$param) $param = trim($param, "' \n\r\t");

echo call_user_func_array($funcname, $params);
于 2011-05-30T19:27:53.197 回答
1

听起来你想要call_user_func_array代替。

$params = array('this is, parameter 1', 'this is parameter2');
$funcname = 'testfunction';

echo call_user_func_array($funcname, $params);
于 2011-05-30T19:28:36.433 回答
0

尝试call_user_func_array改用。

于 2011-05-30T19:26:53.317 回答