在控制器中使用私有变量

时间:2013-05-19 18:03:19

标签: php codeigniter

我正在使用CodeIgniter开发一个网站。

我已经声明了一个控制器,在这个控制器类中我添加了一个私有变量作为数组,我用会话类中的信息填充了这个数组。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Admin extends CI_Controller{

    public function __construct()
    {
        private $data  = Array('');

        parent::__construct();
        $this->data = Array(
            'nom' => $this->session->userdata('admin_fullname')
        );
    }

在某些方法中,我必须将此变量称为:

public function dashboard(){
    $this->load->view('admin/header', $data);
    $this->load->view('admin/left_navigation');
    $this->load->view('admin/dashboard');
    $this->load->view('admin/footer');
}

但它给了我这个错误:

  

#A遇到PHP错误严重性:通知消息:未定义   变量:data文件名:controllers / admin.php行号:73

第73行是:$this->load->view('admin/header', $data);

2 个答案:

答案 0 :(得分:3)

您在函数中声明私有变量;你必须将它移动到类级别并在构造或函数内初始化它。

所以这个:

class Admin extends CI_Controller{

  public function __construct()
  {
    private $data  = Array('');

    parent::__construct();
    $this->data = Array(
        'nom' => $this->session->userdata('admin_fullname')
      );
  }  

将变成这个:

class Admin extends CI_Controller{

  private $data;
  public function __construct()
  {
    $this->data  = Array('');

    parent::__construct();
    $this->data = Array(
        'nom' => $this->session->userdata('admin_fullname')
      );
  }  

此外,请不要忘记通过在$this->前加上数据来访问您的数据。

答案 1 :(得分:1)

由于您使用的是对象属性,因此需要在其前面添加$this

$this->load->view('admin/header', $this->data);

此外,您应该在类范围内声明它,而不是在构造函数中声明它。