2012-05-26 23 views
0

我目前正在爲一個客戶端的大型項目工作,並幫助簡化事情並使管理會話更容易我已經創建了一個會話類,這意味着如果我不斷改變我管理會話的方式我可以在一個文件中訪問會話的結構,而不是多個會話已被回顯的文件(例如用戶名或當前頁)未定義的屬性和未定義的索引當從另一個類中引用類時

我的班級有3種類型函數設置器,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(); 
     } 
    } 

} 

使用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];

現在,如果我通過$session->get_message()它工作正常,但通過其他功能會在這種情況下$operation->display_pending_messages()它返回調用get_message()unset_message()直接以上錯誤。顯然這與$this->運營商有關,但我不知道該怎麼做才能制止這種情況。我嘗試了各種搜索,並發現類似的東西,但在這種情況下沒有幫助。

有人可以請解釋我出錯的地方以及如何解決這個問題嗎?

在此先感謝。

回答

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::所有的功能在你的代碼,沒有創建對象會話

1

您試圖靜態調用這些函數,但它們是實例方法。例如session::get_message()嘗試要麼添加static關鍵字的功能或更好的傳中實例化類並調用方法與$session->get_message()

public function display_pending_messages($session) { 

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