2016-07-18 29 views
0

在CodeIgniter框架中使用靜態類屬性時遇到問題。
我只使用數組作爲類的輸入,使用當前的'Welcome_message'視圖進行調試。
我想使用一個名爲'數據'的私有靜態屬性由不同的類功能(在同一個控制器)使用。
見下面我的代碼:
在類中使用靜態屬性時發生Codeigniter問題

<?php class Test_dev extends CI_Controller 
{ 
    private static $data=''; 

    public function change() 
    { 
    self::$data= array('test1'=>'data1','test2'=>'data2'); 
    $this->load->view('welcome_message',array('output'=>self::$data)); 
    } 

    public function check() 
    { 
    $this->load->view('welcome_message',array('output'=>self::$data)); 
    } 
} 
?> 


當調用在我的控制器/test_dev /變化我已經得到了很好的表現,靜態$ DATA屬性被修改的方法「變」並可檢索。
我獲得:

陣列(2){[ 「測試1」] =>串(5) 「DATA1」[ 「test2的」] =>串(5) 「DATA2」 }

使用方法 '檢查' 時,/test_dev /檢查,我只得到$數據的初始值。

串(0) 「」

我expacting通過使用 '檢查' 的方法也得到第一結果。我不知道我的代碼中有什麼問題來檢索不同方法中的靜態屬性。
感謝您的支持!
Erwann

+0

熏製你好,對不起,我可能會錯過一些要點:使用時先「變」功能我認爲$的數據將通過代碼「自我:: $ DATA改變=陣列( 'TEST1'=> 'DATA1', 'TEST2'=> '數據2');」並在使用「檢查」功能時檢索這些值。 但是'check'函數給出了$ data的初始化值,而不是我在執行過程中'change'函數中給出的值。 – ertop

回答

0

最後,我發現通過CI中使用Cookie助手傳遞和檢索變量$數據的解決方案。
看到我的最終代碼:

<?php 
class Test_dev extends CI_Controller 
{ 
private static $data=''; 

public function __construct() 
{ 
    parent::__construct(); 
    $this->load->helper('cookie'); 
} 

public function change() 
{ 
    self::$data= array('test1'=>'data1','test2'=>'data2'); 
    set_cookie('test',serialize(self::$data),time()+3600); 
    $this->load->view('welcome_message',array('output'=>self::$data)); 
} 

public function check() 
{ 
    $test = unserialize($_COOKIE['test']); 
    $this->load->view('welcome_message',array('output'=>$test)); 
} 
} 
?> 
0

您必須仔細考慮您將什麼樣的數據放入視圖中。在檢查功能您設置爲self :: $ data相同的空值,您在私人靜態屬性中定義。把一些數據,如您在改變功能沒有再校驗功能將返回一定的價值...

+0

繼我的評論之後,會話數據是一種將值存儲在變量中並在同一控制器中的不同功能中重用它的方法? Ertop – ertop

+0

@ertop ** 1)**如果你想爲這兩個函數初始化** self :: $ data **,你可以使用** __ construct()**方法並在這裏放置你的數組。 ** 2)**是的,您可以使用**會話數據** – smokehill