0

所以,我试图把一个变量变成一个函数。

$go_menu=$_POST['menu'];
$go_menu();

Function potoato_chip()
{
    echo "I like Doritos!";
}

Function apples()
{
    echo "I like Fuji";
}

我正在从中获取数据,$go_menu=$_POST['menu']但下面的所有内容$go_menu();都是空白的。

完整的代码pastebin 中。感谢任何帮助!我还在学习!

4

3 回答 3

2
  1. 在调用它之前确保它是可调用的:

    $go_menu = $_POST['menu'];
    
    if(is_callable($go_menu))
        $go_menu();
    
  2. 保留一组有效值;这将解决您的“无内容”问题安全问题:

    $valid_actions = array('potato_chip', 'apples');
    
    if(isset($_POST['menu']) && in_array($go_menu = $_POST['menu'], $valid_actions)) {
        $go_menu();
    }
    
于 2012-07-05T22:03:32.730 回答
1

您不应该这样做:当您刚刚从 POST 中获取该值时,将变量作为函数执行是非常不安全的!特别是因为您正在创建一个管理界面。如果需要,任何恶意的人都可以在您的代码中执行其他功能。

您应该使用 if 语句或 switch 语句来控制需要发生的事情。

注意Function应该写成functionPHP。

于 2012-07-05T21:58:39.990 回答
0

首先,您的代码非常不安全。假设我编辑您的表单并将POST请求设置提交$_POST['menu']给,假设die。这会使您的程序崩溃。你可以想象我还能用这个做什么。正确的方法是使用switch

switch $_POST['menu'] {
    case "menu_1":
        menu_1();
        break;
    case "menu_2":
        menu_1();
        break;
    [...]
}

一般来说,我不喜欢使用变量变量或变量函数,因为很难跟踪变量的可能值。但是,如果经过适当验证,它们仍然可以使用,例如 minitech 的答案。但是,在您的情况下,由于您似乎可以调用的函数选择有限,因此我会使用switch.

于 2012-07-05T22:05:35.027 回答