2016-07-18 27 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