我在Apache 2.2.14和MySQL 5.1.48社区上使用CodeIgniter 2.0和PHP5.3.2。我创建了一个小型测试控制器来隔离另一个问题,并发现我的问题似乎是由公共变量可访问性引起的。调用test1或test2将导致错误,因为它们无法看到其他函数中设置的数组元素的值。有谁知道为什么这不起作用?如果是这样,我需要能够访问类范围变量的解决方案是什么。
感谢。
<?php
class Test extends CI_Controller
{
public $data;
function __construct()
{
parent::__construct();
$this->data = array();
}
function index()
{
$this->data['test1'] = 'This is a test of class public variable access.<br />';
echo 'Class index() called.<br />';
echo $this->data['test1'];
}
function test1()
{
$this->data['test2'] = 'This is a second test of the class public variable access.<br />';
echo 'Class test1 called.<br />';
echo $this->data['test1'];
echo $this->data['test2'];
}
function test2()
{
echo 'The data array contains these two entries:<br />';
echo $this->data['test1'];
echo $this->data['test2'];
}
}
/* End of file test.php*/
/* Location: */
答案 0 :(得分:1)
错误在您的代码中。当您__construct()
上课时,$this->data
等于array()
。一个空数组。应该运行的唯一一行是test1()
函数中的最后一行。
从index()
和test1()
删除所有回复语句,然后尝试:
function test2()
{
$this->index();
$this->test1();
echo 'The data array contains these two entries:<br />';
echo $this->data['test1'];
echo $this->data['test2'];
}
这应该可行,因为现在您已经通过运行定义它们的函数来定义这些数组键。
如果您需要在班级的每个方法中访问它们,请尝试在__construct
中定义它们。