0

私は現在、クライアント向けの大規模なプロジェクトに取り組んでいます。物事を簡素化し、セッションの管理を容易にするために、セッションクラスを作成しました。これは、セッションの管理方法を変更した場合でも、セッションの構造にアクセスできることを意味します。セッションがエコーされた複数のファイルではなく、1つのファイル(ユーザー名や現在のページなど)

私のクラスには、セッター、ゲッター、アンセッターの3種類の関数があり、これは一種の自明です。

この例では、セッションクラスに直接エラーメッセージを設定してから、その中のセッションから関数を呼び出す別のクラスからエラーメッセージを取得しています。

以下は、私が関連していると感じるコードを示す私のファイルの簡略化されたバージョンです

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();
        }
    }

}

example.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では、セッションを静的と呼びますが、すべてのデータはオブジェクトにあります。最良の方法は、クラスセッションの静的なすべてのデータを格納することです。`クラスセッション{

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 に答える