0

我目前正在为客户处理一个大型项目,为了帮助简化事情并使管理会话更容易,我创建了一个会话类,这意味着如果我改变管理会话的方式,我可以访问会话的结构在一个文件中而不是多个文件中,会话已被回显(例如用户名或当前页面)

我的班级有 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()unset_message()直接通过$session->get_message()它按预期工作,但在这种情况下通过另一个函数$operation->display_pending_messages()会返回上述错误。显然这与$this->操作员有关,但我不确定如何阻止这种情况。我尝试了各种搜索,虽然找到了类似的东西,但在这种情况下并没有帮助。

有人可以解释我哪里出了问题以及如何解决这个问题吗?

提前致谢。

4

2 回答 2

1

您正在尝试静态调用这些函数,但它们是实例方法。例如session::get_message() ,尝试将静态关键字添加到函数中,或者更好地传递实例化类并调用方法$session->get_message()

public function display_pending_messages($session) {

        if($session->get_message() != null) {

等等

于 2012-05-26T09:52:17.700 回答
1

在课堂operations上,您将会话称为静态,但您的所有数据都在一个对象中。最好的方法是将您的课程会话的所有数据存储在静态中:`class session {

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::在代码中调用所有函数,而无需创建对象会话

于 2012-05-26T09:55:01.970 回答