php5在函数中创建全局变量


php 5 create global variable within function

我试图在函数内创建一个全局变量,但当我尝试在函数外回显时,它没有被传递。

function check_input($data)
{
        if ( preg_match("/http/i", $data)) {$GLOBALS['spam'] = 'yes'; 
}
check_input($data);
echo $spam;
echo $GLOBALS['spam'];

正确的操作过程是return函数外的值,而不是依赖全局变量。

function check_input($data)
{
    //Note the use of true instead of "yes". 
    //You can do more stuff with true/false.
    if ( preg_match("/http/i", $data)) { return true; }
    else { return false; }
}
$is_spam = check_input($data);
echo $is_spam; //1 or 0, because that's how true and false display in echo.

另请参阅:为什么全球国家如此邪恶

代码的问题在于存在语法错误:

function check_input($data)
{
        if ( preg_match("/http/i", $data)) { $GLOBALS['spam'] = 'yes'; } //Note the } I've added.
}
check_input($data);
echo $spam;
echo $GLOBALS['spam'];

应该做得很好。

您可以使用此的全局关键字

function check_input($data)
{
    global $spam;
    if ( preg_match("/http/i", $data)) $spam = 'yes';
}
$data = "http://www.example.com";
check_input($data);
echo $spam;
echo $GLOBALS['spam'];

但问题是,你为什么要这样做,一个更好的方法是通过引用将$spam-is传递给函数,或者将其作为返回变量返回。

function check_input($data, &$spam)
{
    if ( preg_match("/http/i", $data)) $spam = 'yes';
}
$data = "http://www.example.com";
$spam = "no";
check_input($data, $spam);
echo $spam;
echo $GLOBALS['spam'];

function check_input($data)
{
    return ( preg_match("/http/i", $data))?'yes':'no';
}
$data = "http://www.example.com";
$spam = check_input($data);
echo $spam;
echo $GLOBALS['spam'];