为什么我不能从类函数中访问PHP5类中的公共变量的值?

时间:2011-04-01 01:19:37

标签: php oop codeigniter

我在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: */

1 个答案:

答案 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中定义它们。