CodeIgniter计数器使用" global"变量

时间:2015-10-06 11:13:16

标签: php codeigniter

我是一名新手CodeIgniter开发人员,当我意识到自己无法将工作变成一个非常简单的点击计数器时,我必须说我的挫折感达到了新的高度。您的想法是单击按钮并获得计算的点击次数。 这是viewcounter_view:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');?>
<html>
    <body>  
     <?php
        echo '<form action="'. base_url().'index.php/simplecounter" method="POST">';        
        echo '<font color="blue">Click counter:' . $counter . '</font><br/><br/>';              
        echo '<input type="submit" name="myform" value="Count">';
        echo '</form>';
     ?>
    </div>
  </body>
</html>

如果单击表单按钮,它将调用SimpleCounter Controller:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class SimpleCounter extends CI_Controller { 
    public function __construct() {             
        parent::__construct();
      $this->load->helper('url');
    }
    public function index() {
        $myform=$this->input->post('myform');
        if ($myform=='Count') {
            Globals::setCounter(Globals::getCounter()+1);
        }   
        $data['counter'] = Globals::getCounter();
        $this->load->view('simplecounter_view', $data);         
    }
}

最后,我正在使用带有$ counter属性的Globals类来保持其价值&#34; global&#34;并可从财务主任处获取:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Globals {
     private static $initialized=false;
     private static $counter;   

    private function __construct() {}
    private static function initialize() {
        if (self::$initialized)
            return;

        self::$counter = 0;
        self::$initialized = true;    
     }    
    public static function setCounter($n) {
        self::initialize();
        self::$counter = $n;
    }
    public static function getCounter() {
        self::initialize();
        return self::$counter;
    }
}

上面的代码并没有像我预期的那样工作。点击计数器不会在每次用户点击时更新。在我看来,每次调用其中一个方法时都会重新创建Globals类,因此$ counter重置为零并且$初始化为false。

我知道可能有不同的方法(比如在config.php中定义$ counter)虽然我认为使用一个单独的类来保持$ counter更优雅。我在这里错过了什么?我在哪里弄错了?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

由于HTTP是无状态协议,一旦将http响应发送到请求浏览器,所有变量都会丢失。

  

在计算中,无状态协议是一种通信协议   将每个请求视为与之无关的独立事务   任何先前的请求,以便通信包括独立的   请求和响应对。

您需要将计数器保存在数据库中。