【问题标题】:Using a private variable in a controller在控制器中使用私有变量
【发布时间】:2013-05-19 18:03:19
【问题描述】:

我正在使用 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');
}

但它给了我这个错误:

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

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

【问题讨论】:

  • $data -> $this-&gt;data

标签: php codeigniter


【解决方案1】:

您在函数中声明私有变量;您必须将其移至类级别并在构造或函数中对其进行初始化。

所以这个:

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-&gt;

【讨论】:

  • 轻微的语法错误。 $this-&gt;$data = Array(''); 应该是:$this-&gt;data = Array('');(或者,最好是$this-&gt;data = array();)。
【解决方案2】:

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

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

另外,你应该在类范围内声明它,而不是在构造函数的范围内。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-15
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多