0
我有一個的index.php具有以下內容: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
的內容?也許你有一些想法,我做錯了什麼。
「在其他類中包含和使用私有變量是否存在任何問題?」 Nopez。但是,我確實遇到了緊耦合問題。將實例注入方法的參數會更好。這被稱爲[依賴注入](http://nl.wikipedia.org/wiki/Dependency_injection)。 – PeeHaa 2012-07-11 15:59:20
@PeeHaa:我通過使用函數設置數據庫等來改變了這種情況。班上不再有新的表述。我觀察了一次遞歸,其中對象在會話中,並打印出會話。因爲每個對象都相互鏈接,所以會發生遞歸。這應該是一個問題嗎? – testing 2012-07-12 08:23:23