如何在PHP中的函数内设置变量变量?

时间:2013-01-04 18:30:53

标签: php forms scope

我正在制作一个表格,其中一些是可选的。为了显示此表单的输出,我希望能够检查POST变量是否包含内容。如果是这样,脚本应该创建一个新的普通PHP变量,其值和名称与POST变量相同,如果不是,它应该创建一个新的普通PHP变量,其名称相同但值“未定义”。这就是我到目前为止所做的:

function setdefined($var)
{
    if (!$_POST[$var] == "")
    {
        $$var = $_POST[$var]; // This seems to be the point at which the script fails
    }
    else
    {
        $$var = "Not defined";
    }
}
setdefined("email");
echo("Email: " . $email); // Provides an example output - in real life the output goes into an email.

此脚本不会抛出任何错误,而是返回“Email:”,不指定任何值。我认为这是我在函数中使用变量的方式的问题;以下代码按预期工作,但不太实用:

function setdefined(&$var)
{
    if (!$_POST[$var] == "")
    {
        $var = $_POST[$var];
    }
    else
    {
        $var = "Not defined";
    }
}
$email = "email"; // As the var parameter is passed by reference, the $email variable must be passed as the function argument
setdefined($email);

2 个答案:

答案 0 :(得分:2)

你为什么不这样做:

function setdefined($var)
{
    if (isset($_POST[$var]) && !empty($_POST[$var]))
    {
        return $_POST[$var];
    }
    else
    {
        return "Not defined";
    }
}
$email = setdefined('email');
echo("Email: " . $email);

您在第一个示例中创建的变量仅在函数

中可用

答案 1 :(得分:0)

您可以使可能是恶意用户,全局用户提交该未知变量。为此,请将其添加到函数的开头:

global $$var ;

这不仅丑陋,而且可能也不安全。