如何调用存储在字符串变量中的函数? [PHP]

时间:2014-07-10 20:11:14

标签: php drupal

我对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 = explode('),',$ rows);     $ pieces [0] = $ pieces [0]。 ')“;

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

另一个例子不起作用     foreach($ pieces作为$ f){         $ markers [] = eval(“return $ f;”);     }     '标记'=&gt;数组($ markers)

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

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

请帮忙。

2 个答案:

答案 0 :(得分:0)

我会使用call_user_func函数。

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

如果您确实设置了正确解析值,则可以使用Eval。这是不受欢迎的,也可能是危险的,所以再考虑找一个更好的解决方案。

eval($rows);

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

答案 1 :(得分:0)

除了尝试将其解析为有意义的内容之外,您还可以使用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.')",
);