我是CI的新手,我想做的是拥有一个类级变量(例如一个数组)。但看起来CI尽管吹嘘不高,却不支持这一功能。用户指南中未提及任何相关内容。有一个称为私有函数和变量的标题,但文本似乎对变量保持沉默。
我希望有类似的东西:
class OrderStats extends CI_Controller {
protected $arr_CoreCountry = ('0'=>'uk', '1'=>'us');
public function __construct()
{
parent::__construct();
// Your own constructor code
}
public function index()
{
$this->load->model('orders', '', TRUE);
//$data['result'] = $this->Testmodel->get_entries();
$data['result'] = $this->Testmodel->get_reports();
$this->load->view('test', $data);
}
public function getOrderStats()
{
$this->load->model('Orderstatsmodel', '', TRUE);
//$data['result'] = $this->Testmodel->get_entries();
foreach ($arr_CoreCountry as $key => $value)
{
$data['result'] = $this->Orderstatsmodel->get_orderStats($key);
}
// $data['result'] = $this->Orderstatsmodel->get_orderStats(0);
$this->load->view('orderstats', $data);
}
请记住,当我在这篇文章中声明$ arr_CoreCountry变量时,我经常会看到语法错误消息。 当我把它放在任何函数内部时,当然,它超出了范围,我不断得到一个错误消息,$ arr_CoreCountry是一个未定义的变量。 所以问题是我在哪里定义它?
由于来自codeigniter的这个消息,因为我的一半时间被浪费了,所以期待快速回复。
答案 0 :(得分:9)
这应该有效:
类OrderStats扩展了CI_Controller {
protected $arr_CoreCountry = array('0'=>'uk', '1'=>'us'); public function getOrderStats() { $this->load->model('Orderstatsmodel', '', TRUE); //$data['result'] = $this->Testmodel->get_entries(); foreach ($this->arr_CoreCountry as $key => $value) // etc
}
您省略了原始代码中的$this->
。
修改强> 这是我的测试代码〜
class Testing extends CI_Controller {
protected $foo = array('test'=>'foo', 'bar'=>'baz');
function index() {
foreach($this->foo as $k => $v) {
echo $k . ' = ' . $v . '<br />';
}
}
}
// outputs:
test = foo
bar = baz
也许您可以发布语法错误,因为它们似乎在原始帖子中缺失。
答案 1 :(得分:0)
您有语法数组声明错误。请尝试声明这样的数组:
protected $arr_CoreCountry = array('0'=>'uk', '1'=>'us');
请查看此网站以获取阵列手册:http://php.net/manual/en/language.types.array.php
答案 2 :(得分:-2)
我自己解决了这个问题。
我改变了两件事
protected $arr_CoreCountry = ('0'=>'uk', '1'=>'us');
已更改为
var $arr_CoreCountry = array(0=>'se', 1=>'fi',2=>'de');
和
foreach ($arr_CoreCountry as $key => $value)
已更改为
foreach ($this->arr_CoreCountry as $key => $value)
我错过了这个,但是当我把它放在那里时,它仍然没有用。当我将protected更改为var时,它可以工作。
感谢大家的投入......