【问题标题】:Refer to a global variable doesn't work引用全局变量不起作用
【发布时间】:2013-11-10 16:11:22
【问题描述】:

我在 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 - 结果相同。

【问题讨论】:

  • photo.php 还是 login.php?此外,如果两个变量都在同一个范围内,则不需要添加全局语句
  • login.php 中是 UserAccount 类的代码,在 photo.php 中我试图访问全局变量 $userAccount 表单 loginForm.php。

标签: php variables global


【解决方案1】:

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

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

例如在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

【讨论】:

    【解决方案2】:

    好的,现在我做到了:

    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-07-13
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2017-05-20
    • 2013-09-21
    相关资源
    最近更新 更多