类不保留受保护的值
问题描述:
我已经查看了我的问题的现有答案。类不保留受保护的值
我的权利,通过过程中回显的价值和权利,直到在“标题(“位置”指令值保持不变。
我不认为这是一个序列化问题,建议类似问题...
下面是类的相关位:
class clsSetUser {
protected $UserID = 0;
public function initUser($id) {
// get user details from database
$this->setUserID($id);
// etc...
}
private function setUserID($value) { $this->UserID = $value; }
public function getUserID() { return $this->UserID; }
}
的common.php:
if(unset($clsUser)) $clsUser = new clsSetUser;
登录-exec.php:
$clsUser->initUser($id);
header("Location: somewhere.php");
somewhere.php:
echo $clsUser->getUserID();
// here it equals 0
什么想法? “标题”序列化的一切?
答
这是因为PHP实际上是从somewhere.php
的干净石板开始的。
header("Location: somewhere.php");
发送命令浏览器连接到不同的页面。在这个页面中,前一页的非变量在PHP中可用。
您需要设置$_SESSION
中的userId,以便您可以在访问somewhere.php
时从数据库中重新加载用户。
登录-exec.php
$clsUser->initUser($id);
$_SESSION['user_id'] = $id;
header("Location: somewhere.php");
somewhere.php
$clsUser->initUser($_SESSION['user_id']);
高炉 - 我曾希望避免使用$ _SESSION太多。每当我打开一个新页面时,不断点击数据库是不合逻辑的。感谢您的信息。 –
为什么你想避免碰到用户对象的数据库? 如果用户/会话表得到正确索引,获取用户对象将不会花费任何时间。否则,您可以尝试将所需的用户信息存储在Cookie中,但随后将在每个请求中将数据传输到服务器。这可能会增加页面的加载时间。 – EWit
这不仅仅是用户对象,它是数据库对象,以及不会改变和来自ini文件的各种值。这都是增加处理时间,应该只执行一次。我有一个非常大的应用程序,数百页。我曾希望构建一个完整的面向对象系统,但显然不是在PHP中,如果每次发出头文件指令时类都被破坏,我不能这样做...... –