全局变量从函数中消失


Global variable disappear out of the function

我有一个小问题,我找不到原因。我有这个简单的函数,应该检查用户/pass是否正确,我想保存所有关于用户的信息从$row object到$userdata globalobject

function check_credentials($username, $password) {
    global $userdata;       
        $password = md5($password);
        $result = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' LIMIT 0,1")or die(mysql_error());

    while ($row = mysql_fetch_object($result)) {
        if(($row->password == $password) && ($row->username == $username) && ($row->ver == 1)) {
            $userdata = clone $row;
            return true;
        }
        else break;
    }
    }
    unset($_SESSION['logged_as']);
    return false;
}

你知道为什么,在函数之外,全局变量消失了吗?因为它应该是global

您的函数只是返回布尔值true,而不是修改后的变量。把

            $userdata = clone $row;
            return true;

        $userdata = clone $row;
        return $userdata;

正如@ broadcast所说,全局函数必须在之前的函数中声明过。

$var = null;
function name() {
global $var
}
// use $var as global

使用全局变量,只需返回$userdata:

if(($row->password == $password) && ($row->username == $username) && ($row->ver == 1)) {
return $row;
}

然后在调用函数

时捕获行
$userdata = check_credentials($username, $password);