我是一名新手CodeIgniter开发人员,我必须说当我意识到我无法使工作成为一个非常简单的点击计数器时,我的挫折感突飞猛进到新的高度。这个想法是你点击一个按钮,并获得点击次数。 这是视图simplecounter_view:使用“全局”变量的CodeIgniter计数器
<?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控制器:
<?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);
}
}
最后,我使用与物业$柜台Globals类,以保持其值“全局”并可从控制器访问:
<?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是更优雅的。我在这里错过了什么?我哪里弄错了?非常感谢您的帮助。
PHP是无状态的,所以它会被重置。如果你想坚持柜台,那么你需要一些存储它。 – Rooneyl
谢谢你的回答。我完全错过了这一点。然后我明白,我必须使用某种机制(会话,数据库...)来存储状态。 –