Php 如何在codeigniter框架上的主控制器中加载模型?

Php 如何在codeigniter框架上的主控制器中加载模型?,php,codeigniter,Php,Codeigniter,我正在创建一个主控制器,以便我的应用程序上的每个其他控制器都扩展主控制器(my_控制器)。 我的问题是如何使加载模型更抽象,让我向您展示代码以更好地解释 class MY_Controller extends CI_Controller { protected $model; function __construct() { parent::__construct(); } function get($order_by) {

我正在创建一个主控制器,以便我的应用程序上的每个其他控制器都扩展主控制器(my_控制器)。 我的问题是如何使加载模型更抽象,让我向您展示代码以更好地解释

class MY_Controller extends CI_Controller
{

    protected $model;

    function __construct()
    {
        parent::__construct();
    }

    function get($order_by)
    {
        $this->load->model($this->model);
        $query = $this->$this->model->get($order_by);
        return $query;
    }
}
我在主控制器中声明一个受保护的变量
$model
,以便在扩展控制器上为其赋值:

class Home extends MY_Controller {

    public function __construct() {
        parent::__construct();
         $this->model = "home_model";
    }

    public function index()
    {
        $test = $this->get('id');
    }
}
问题是,在我的_控制器上,我无法加载模型

$this->$this->model->get()

我收到以下错误:
消息:无法将类Home的对象转换为字符串


任何帮助都将不胜感激,谢谢

您的问题是
$this->$this->model->get()
。如果要在这样的链中使用对象属性(
$this->model
),则需要将其用大括号括起来:
$this->{$this->model}->get()

为什么不将分配给受保护全局
$model
变量的值保存在函数内的变量中呢

class MY_Controller extends CI_Controller{

  protected $model;

  function __construct(){
    parent::__construct();
  }

  function get($order_by){
    $_model = $this->model // I added this line.
    $this->load->model($_model); // I modified this line.
    $query = $this->$_model->get($order_by);  // I modified this line.
    return $query;
  }
}

控制器不能用作模型