call_user_func
とcall_user_func_array
の署名に注意してください。
function product($a, $b) {
echo "Yo ".$a;
echo "Yo ".$b;
echo "<br>\n";
}
// there are 3 single arguments
call_user_func('product', 'dd', 'lizzy');
// the same with variables
$fn_name = 'product';
$arg1 = 'dd';
$arg2 = 'lizzy';
call_user_func($fn_name, $arg1, $arg2);
// or give ARGUMENS ONLY as array, but function name as string scalar
$args = array($arg1, $arg2);
call_user_func_array($fn_name, $args);
// if you for some reason need to handle a single array for the name and arguments in one,
// you need to write your own function:
function call_user_func_array2($call_info)
{
$fn_name = array_shift($call_info); //extract first item
call_user_func_array($fn_name, $call_info);
}
$call_info = array($fn_name, $arg1, $arg2);
call_user_func_array2($call_info);
さらに、指定した文字列"'product','dd','lizzy'"
を処理するために上記のコードを拡張することができます。 (たとえば、ある形式のデータベースにこの形式で格納されている場合)
この文字列でコンマ区切りの値を抽出する必要があります。これを達成するには、str_getcsv
以上の正規表現を使用できます。オプションの空白文字をカンマで区切り、単一のまたはダブルクォートで囲んだとします。正規表現は次のようになります:(?:^|,)\s*(['"])(.+?)\1\s*?(?=,|$)
。 ndサブパート(.+?)
は、一重引用符または二重引用符内のすべてをキャプチャします。call_user_func_array2
と組み合わせる
それはそのようになっています
function call_user_func_string($call_info)
{
if(!preg_match_all('~(?:^|,)\s*([\'"])(.+?)\1\s*?(?=,|$)~u', $call_info, $matches))
throw new Exception("call_user_func_string expects parameter 1 to be a string like `'functionname','arg1','arg2' [,...]` "
. 'or `"functionname","arg1","arg2" [,...]`.');
call_user_func_array(array_shift($matches[2]), $matches[2]);
}
// some differently formatted examples
$my_string = "'product','dd','lizzy'";
call_user_func_string($my_string);
$my_string = ' "product" , "dd" , "lizzy" ';
call_user_func_string($my_string);
$my_string = <<<'_END_'
'product' , "dd",'lizzy' ,"lucy's cat"
_END_;
call_user_func_string($my_string);
の$変数名の内容は何ですか? 'var_dump($ variablename)' –
まったく同じです。 –
うわー!情報提供 –