PHP和类 - 在会话中写入会覆盖局部变量

时间:2012-07-11 15:55:54

标签: php class session variables include

我的 index.php 包含以下内容:

include_once('includes/auth.php');
include_once('classes/class.DatabaseQuery.php');
include_once('classes/class.Project.php');
include_once('classes/class.User.php');

$project = new Project();
$user = new User();

// HTML, HEAD, BODY

$usergroup = $user->getUserGroup($_SESSION['user']);
// ...

所以我在index.php中包含了所有需要的类。我还在这个文件中创建了一个类的实例。然后我有我的班级文件(例如 class.Project ):

class Project {

private $db;
private $evaluation;

public function __construct($id=null){
    $this->setPreferences();
}

private function setPreferences() {
    $this->db = new DatabaseQuery();
    $this->evaluation = new Evaluation();
}


public function getSomething(){
    if($this->evaluation->checkSomething(1)){
        echo "test";
    }
}
 // ...
}

在这些文件中,我将其他类声明为私有变量。比我访问其他类的方法。

在其他类中包含和使用私有变量是否存在任何问题?

现在我有一个奇怪的问题。如果我将值写入$_SESSION['user'],我的私有变量user将被覆盖。在我在会话中写入内容之前,会话值已经填充。这是我的 login.php

    include_once('classes/class.User.php');     
    session_start();

    $username = $_POST['username'];
    $password = $_POST['password'];

    $user = new User();
    if ($user->checkLoginData($username, $password)) {
        $_SESSION['userID'] = $user->getUserIDForName($username);
        // it is an object
        var_dump($user);
        $_SESSION['user'] = $username;
        // it is a string
        var_dump($user);
        // ...
    }

$_SESSION['user']=$username如何更改本地变量$user的内容?也许你有一些想法,我做错了。

1 个答案:

答案 0 :(得分:0)

<强>解决方案:

现在我遵循here的建议,其中register_globals应该被关闭。例如。与htaccess

php_value register_globals 0

似乎工作。