0

我在 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();
(...)

在文件'photo.php'中:

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

是什么给了我一个错误:

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

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

4

2 回答 2

0

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

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

例如在 file1.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 会话中存储对象

于 2013-11-10T18:27:00.687 回答
0

好的,现在我做到了:

1) 在 AJAX 请求文件中,我创建了一个 UserAccount 类的实例,它将存储在 $_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
于 2013-11-10T19:57:48.453 回答