【问题标题】:Cannot access a variable in a codeigniter model无法访问 codeigniter 模型中的变量
【发布时间】:2011-05-17 17:55:36
【问题描述】:

我正在尝试从 codeigniter 控制器访问模型中的数组集,但事情很奇怪。

目前我在模型中只有这个:

class Pages_model extends CI_Model {
    function __construct()
    {
        parent::__construct();
    }

    var $pages = array(
        'draw', 'stackoverflow', 'words'
    );
}

我可以看到数组正在设置,因为当我执行时

$this->load->model('Pages_model');
die(var_dump(get_object_vars($this->Pages_model)));

我得到了输出

array
  'pages' => 
    array
      0 => string 'draw' (length=4)
      1 => string 'stackoverflow' (length=13)
      2 => string 'words' (length=5)

但是当我尝试访问变量本身时:

 $this->load->model('Pages_model');
 die(var_dump($this->Pages_model->$pages));

我收到一个错误:

消息:未定义变量:页面

这对我来说没有任何意义。怎么回事???

【问题讨论】:

    标签: php codeigniter model controller


    【解决方案1】:

    试试 $this->Pages_model->pages,页面前不加 $。

    当你这样做时:

    $this->Pages_model->$pages
    

    PHP 尝试评估 $pages 的变量,该变量为 null (Pages_model->null)。

    【讨论】:

      【解决方案2】:

      我不确定您是否可以直接访问模型中的变量我相信您只能调用函数,也许为变量创建一个 getter 函数并返回变量。例如。

      模型页面

      function get_pages() {
         return this->pages;
      }
      

      控制器

      $pages = $this->Pages_model->get_pages();
      

      【讨论】:

      • this->pages 中缺少“$”。我认为这归结为个人喜好......只有在变量未设置为公共时才真正使用 Getter 函数。通常的做法是在类/模型中删除变量,然后在类被实例化后在其外部调用模型的变量,并根据需要调用模型函数来获取、设置和更新变量。随时在这里纠正我。
      【解决方案3】:

      如果你像这样定义它,你可以直接访问变量:

      class Pages_model extends CI_Model {
          function __construct()
          {
              parent::__construct();
              $this->pages = array(
              'draw', 'stackoverflow', 'words'
          );
          }
      
      }
      

      然后你会调用它:$this->pages_model->pages

      【讨论】:

        【解决方案4】:

        制作静态成员:

        class Model_name {
                static $member='nothing';
        }
        //and use it with scope resolution operator '::'
        $m = new Model_name();
        echo $m::member; //output: nothing
        $m::member = 'something';
        echo $m::member; //output: something
        

        【讨论】:

          猜你喜欢
          • 2016-07-20
          • 2014-05-16
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-21
          • 2015-11-05
          相关资源
          最近更新 更多