接受变量并将其用作函数

时间:2012-07-05 21:55:07

标签: php function variables

所以,我正在尝试将变量转换为函数。

$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中为here。感谢任何帮助!我还在学习!

3 个答案:

答案 0 :(得分: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();
    }
    

答案 1 :(得分:1)

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

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

请注意,Function应在PHP中写为function

答案 2 :(得分:0)

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

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

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