如何调用函数存储在字符串变量?(PHP)


How to call function stored in string variable? [PHP]

我有一个问题要问PHP专家。嗯,我在变量$ rows中有数据,其中包含了几个函数的源代码,例如:

$ rows = "
gmap3_tools_create_marker (21.445985, 74.521431, 'marker with info window', '<a href=http://www.google.com> www.google.com </ a> some text some text photos.') 
gmap3_tools_create_marker (22.445985, 73.521431, 'marker with info window', '<a href=http://www.google.com> www.google.com </ a> some text some text photos.') 
gmap3_tools_create_marker (23.445985, 75.521431, 'marker with info window', '<a href=http://www.google.com> www.google.com </ a> some text some text photos.') "

这是在Drupal中使用Views的结果:生成一个条目,我使用Views -view.tpl.php编辑位置,方法是将结果放在代码中必需的gmap3-tools中的变量$ rows中。这个字符串是应用函数gmap3_tools_add_map标记所必需的对象标记数组。

gmap3_tools_add_map(array(
'mapId' => 'gmap-canvas',
'mapOptions' => array(
  'zoom' => 15,
  'center'=>'51.745985, 15.598451',
),
'markers' => array($rows),
'gmap3ToolsOptions' => array(
  'defaultMarkersPosition' => GMAP3_TOOLS_DEFAULT_MARKERS_POSITION_CENTER,
),
'markerOptions' => array(
  // Set custom shadow for all icons.
  'shadow' => file_create_url(drupal_get_path('module', 'gmap3_tools') . '/images/druplicon-shadow.png'),
),
));

当然,上面的代码不起作用。但是,如果您将直接粘贴结果(即上面的结果)到函数而不是字符串变量$ rows是一个函数gmap3_tools_add_map很好地应用标记。

我知道问题在于它不执行gmap3_tools_create_marker函数,它们作为字符串发送。

是否可以将字符串转换为函数?

我尝试了eval函数,但无济于事。我想call_user_func,但不幸的是我不知道如何咬,请帮助。

代码必须精确地在这个数组中调用。我不能给出结果(通过eval)只在数组中直接相同的函数,也不能作为变量。

我这样做了:$ pieces = explosion ('),', $ rows);$ pieces [0] = $ pieces[0]。")";

'markers' => array ($ pieces [0]) <- do not display 

另一个例子不起作用Foreach ($ pieces as $ f) {$ marker [] = eval ("return $ f;");}' marker ' => array ($ marker)

另一方面,将代码直接粘贴到像这样的数组中,一切都正确显示。

'markers' => array (
gmap3_tools_create_marker (21.343556, 35.532361, 'Some text', '<a href="www.somesite.com"> some site </ a> <br> Some text'), 

请帮。

我将使用call_user_func函数

call_user_func("gmap3_tools_create_marker", param1, param2 param3);

如果您确实反对正确解析值,则可以使用Eval。这是不被允许的,而且有潜在的危险,所以再次考虑寻找一个更好的解决方案。

eval($rows);

eval将执行给定字符串中的代码。

除了尝试将其解析为有意义的内容外,您还可以使用eval:

做一些事情。
$funcs = array_filter(array_map('trim', explode("'n", $rows)));
foreach($funcs as $f) {
    $markers[] = eval("return $f;");
}

然后使用:

'markers' => $markers,

如果你可以在开头将其定义为数组,那么你可以省略第一部分:

$rows = array(
"gmap3_tools_create_marker (21.445985, 74.521431, 'marker with info window', '<a href=http://www.google.com> www.google.com </ a> some text some text photos.')",
"gmap3_tools_create_marker (22.445985, 73.521431, 'marker with info window', '<a href=http://www.google.com> www.google.com </ a> some text some text photos.')",
"gmap3_tools_create_marker (23.445985, 75.521431, 'marker with info window', '<a href=http://www.google.com> www.google.com </ a> some text some text photos.')",
);