我不知道你为什么会需要这个,但问题是,你做的方式,他们总是字符串,如果他们是可调用的,没有办法区分。既然数组是按创建顺序排列的,那么使用键或类似的方法如何:
$data["foo"] = "foo";
$data[] = "bar";
foreach ($data as $key => $element) {
if (is_callable($element) && is_string($key)) {
echo $element()."\n";
} else {
echo $element."\n";
}
}
另一种可能性(有很多):
$data[]['fnc'] = "foo";
$data[]['str'] = "bar";
foreach ($data as $element) {
if (isset($element['fnc']) && is_callable($element['fnc'])) {
$element = $element['fnc'];
echo $element()."\n";
} else {
echo $element['str']."\n";
}
}
如果您存储代码,则可以评估:
$data[] = "echo foo();";
$data[] = "echo 'bar';";
foreach ($data as $element) {
eval($element);
}