引用全局变量不起作用

时间:2013-11-10 16:11:22

标签: php variables global

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

是什么让mi出错:

  

在非对象

上调用成员函数getLogin()

我也试过$ GLOBALS - 结果相同。

2 个答案:

答案 0 :(得分: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'

?>

要在请求中使用变量,请使用会话。

safest way to create sessions in php

Storing objects in PHP session

答案 1 :(得分:0)

好的,现在我做了:

1)在AJAX请求文件中,我创建了一个Class 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
相关问题