1

我需要帮助找出 eval 函数的语法——或者即使 eval 是正确的方法。我的 mysql 数据库中有一个列,其中包含我需要运行的 PHP 函数的名称。还有一些 PHP 变量希望保留为变量,直到它们被传递给函数。以下是我到目前为止的内容:

eval($valRec[$key]($key,$value));

$valRec 是包含 mysql SELECT 的结果的数组。$key 是一个变量,它引用包含函数名称的列的名称。

$key 和 $value 是我需要传递给函数的 PHP 变量。

最后,我想结束:

functionName($key,$value);

应该运行哪个 PHP。

希望我解释清楚 - 提前感谢您的帮助!

4

5 回答 5

4

eval 可能不是你想要的。看call_user_funccall_user_func_array。它们允许您调用名称在变量中的函数。

call_user_func($valRec[$key], $key, $value);
于 2012-09-07T02:37:40.050 回答
3

您需要做的就是:

$valRec[$key]($key,$value);

参考:变量函数

于 2012-09-07T02:27:32.013 回答
2

在 php 中,您可以执行以下操作;

$func = 'strtolower';
$foo = $func($bar);

所以在你的情况下,$valRec[$key]($key,$value);只会工作。

检查演示。

补充:eval你不工作 的原因eval需要将字符串作为参数,不要忘记;结束语句,否则会出现语法错误。所以你需要这样做:

eval($valRec[$key].'($key, $value);');
于 2012-09-07T02:46:45.917 回答
1

我最近没用过PHP,但是这个概念eval是对一个字符串求值。

因此,您需要创建代表您要运行的代码行的字符串。

在您的情况下,这意味着:

eval($valRec[$key] . '($key, $value);');

你自己说过,你想结束functionName($key,$value);所以你需要制作一个字符串,然后将它传递给eval.

于 2012-09-07T02:24:19.147 回答
0

看这个例子,

<?php
    $string = 'cup';
    $name = 'coffee';
    $str = 'This is a $string with my $name in it.';
    echo $str. "\n";
    eval("\$str = \"$str\";");
    echo $str. "\n";
?>

这是输出

This is a $string with my $name in it.
This is a cup with my coffee in it.

你需要阅读这篇文章,什么时候 eval 在 php 中是邪恶的?

于 2012-09-07T02:23:45.717 回答