Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和类-写入会话覆盖局部变量_Php_Class_Session_Variables_Include - Fatal编程技术网

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

PHP和类-写入会话覆盖局部变量,php,class,session,variables,include,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

我有一个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):

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


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

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

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";
    }
}
 // ...
}
    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);
        // ...
    }

如何更改局部变量的内容?也许你知道我做错了什么。

解决方案:

现在我听从了来自的建议,应该在那里打开
register\u globals
。例如,使用
htaccess

php\u值寄存器\u全局0


似乎有效。

“在其他类中包含和使用私有变量是否有任何问题?”没有。然而,我确实有一个紧耦合的问题。最好将实例作为方法的参数注入。这就是所谓的。@PeeHaa:我通过设置数据库等函数改变了这一点。类中不再有新语句。我观察了一次递归,对象在会话中,我打印了会话。因为每个对象彼此链接,所以会发生递归。这应该是个问题吗?