我目前正在为客户做一个大型项目,为了帮助简化事情并使会话管理更容易,我制作了一个会话类,这意味着如果我更改管理会话的方式,我可以访问一个文件中的会话结构,而不是访问会话已回显的多个文件(例如用户名或当前页面)
我的类有 3 种类型的函数 setter、getter 和 unsetter,这是不言自明的。
现在在这种情况下,我直接向会话类设置错误消息,然后从另一个类获取错误消息,该类从其中的会话调用函数。
以下是我文件的简化版本,显示了我认为相关的代码
c_session.php
class session {
private $instance = 'isntname';
private $A_user = 'user';
private $A_page = 'page';
private $A_message = 'message';
//Set messages to the session.
public function set_message($type, $value) {
$_SESSION[$this->instance][$this->A_message][$type] = $value;
}
//Get messages from the session.
public function get_message() {
return $_SESSION[$this->instance][$this->A_message];
}
//Unset messages from the session.
public function unset_message() {
#unset($_SESSION[$this->instance][$this->A_message]);
}
}
c_operations.php
class operations {
//Display all pending messages.
public function display_pending_messages() {
if(session::get_message() != null) {
foreach(session::get_message() as $type => $value) {
if(strlen($type) != null) {
echo '
<div class="panel ' . $type . '">
' . $value . '
<span class="close" onclick="hide_parent_element(this);">X</span>
</div>
';
}
}
session::unset_message();
}
}
}
示例.php
$session->set_message('confirm', 'THIS IS A CONFIRM');
$session->set_message('error', 'THIS IS AN ERROR');
$session->set_message('notice', 'THIS IS A NOTICE');
$session->set_message('warning', 'THIS IS A WARNING');
var_dump($_SESSION);
$operation->display_pending_messages();
收到的错误/通知等
Notice: Undefined property: operations::$instance in /var/www/_classes/parent_session.php on line 43
Notice: Undefined property: operations::$A_message in /var/www/_classes/parent_session.php on line 43
Notice: Undefined index: in /var/www/_classes/parent_session.php on line 43
第 43 行是指return $_SESSION[$this->instance][$this->A_message];
行
现在,如果我调用get_message()
并直接通过$session->get_message()
unset_message()
,它会按预期工作,但在这种情况下通过另一个函数$operation->display_pending_messages()
它会返回上述错误。显然,这与$this->
运算符有关,但我不确定该怎么做才能阻止这种情况。我尝试了各种搜索,虽然找到了类似的东西,但在这种情况下没有帮助。
有人可以解释一下我哪里出了问题以及如何解决这个问题吗?
提前谢谢。
在类operations
中,您将会话称为静态,但所有数据都在对象中。最好的方法是将课堂会话的所有数据存储在静态中:`课堂会话 {
private static $instance = 'isntname';
private static $A_user = 'user';
private static $A_page = 'page';
private static $A_message = 'message';
//Set messages to the session.
public static function set_message($type, $value) {
$_SESSION[self::instance][self::A_message][$type] = $value;
}
//Get messages from the session.
public static function get_message() {
return $_SESSION[self::instance][self::A_message];
}
}
因此,您可以使用代码中的session::
调用所有函数,而无需创建对象会话
您正在尝试静态调用这些函数,但它们是实例方法。 例如session::get_message()
尝试将 static 关键字添加到函数中,或者更好地仍然传递实例化类并使用$session->get_message()
调用方法
public function display_pending_messages($session) {
if($session->get_message() != null) {
等。