引用全局变量不起作用


Refer to a global variable doesn't work

我在 PHP 中编写一个简单的脚本,文件很少,在"loginForm.php"中,我有代码:

<?php
session_start();
$login = $_GET['login'];
$password = $_GET['password'];
$remember = $_GET['remember'];
include_once("login.php");
$userAccount = new UserAccount($login, $password);
$logged = $userAccount -> isLogged();
(...)

并在文件"照片.php"中:

global $userAccount;
$login = $userAccount -> getLogin();

是什么给了MI一个错误:

在非对象上调用成员函数 getLogin()

我也尝试了$GLOBALS - 相同的结果。

全局变量不能跨请求工作,但具有文件范围。

全局变量的典型用法,如果有一个跨不同范围可访问的变量(通常在同一文件中函数。

例如在文件 1 中.php

<?php
$value = 1;
echo $value;    // prints '1'
function f1() {
   global $value;
   $value++;
}
echo $value;    // prints '2'
function f1() {
   $value++;
}
echo $value;    // prints '2'
?>

若要跨请求使用变量,请使用会话。

在 PHP 中创建会话的最安全方法

在 PHP 会话中存储对象

好的,现在我做到了:

1)在AJAX请求文件中,我创建了一个类用户帐户的实例,该实例将存储在$_SESSION数组中

<?php
include_once("login.php");
session_start();
$login = $_GET['login'];
$password = $_GET['password'];
$rememberMe = $_GET['remember'];
$userAccount = new UserAccount();
$userAccount -> LogIn($login, $password);
$logged = $userAccount -> isLogged();
$_SESSION['userAccountClassObject'] = serialize($userAccount);

2)在静态(非AJAX请求)文件"photo.php"中,它工作正常:

<?php
include_once("login.php");
$user = unserialize($_SESSION['userAccountClassObject']);
$login = $user -> getLogin();

3)但是在其他AJAX请求文件中 - addComment.php不幸的是不起作用:

<?php
$id = $_GET['id'];
$comment = $_GET['comment'];
session_start();
include("login.php");
$user = unserialize($_SESSION['userAccountClassObject']);
$login = $user -> getLogin(); // Fatal error