类的PHP调用方法,其中类名位于其他类的字段中

类的PHP调用方法,其中类名位于其他类的字段中,php,class,static-methods,Php,Class,Static Methods,我有一个CodeIgniter php设置,并使用RESTful功能对其进行了增强 我有以下结构 php(这是基本控制器类 class Base { private $model public function __construct($model = false) { $this->model = $model . '_model'; $this->load->model($this->model); ... }

我有一个CodeIgniter php设置,并使用RESTful功能对其进行了增强

我有以下结构

php(这是基本控制器类

class Base {
    private $model
    public function __construct($model = false) {
        $this->model = $model . '_model';
        $this->load->model($this->model);
    ...
}
然后是指定模型的控制器

class Products extends Base {

    public function __construct() {
        parent::__construct('product');     
    }
}
问题如下:在base.php中,我有用于HTTP方法(get、post、put、delete)的函数,但我无法从模型中调用静态方法,如下所示:

public function get() {
    return $this->model::loadData();
}
如果我在
get()
中将
$this->model
赋值给一个局部变量,它会工作,但在我看来很难看

所以我的问题是:如果给定类B的成员中的类名,我如何调用类a的静态方法,而不将其分配给类B的方法中的新局部变量


注:我知道CodeIgniter看起来不像这样,但它的结构与我的问题无关。

正如您所指出的,将$this->model赋值给一个局部变量,如$model,然后调用$model::loadData()的效果与预期一样

$this->model::loadData()调用不起作用的事实可能需要考虑->操作符之间的优先级,但我不能确定,因为官方文档中没有提及这些操作符

对于优先级相等的运算符,左关联性表示求值从左向右进行,右关联性表示相反。对于优先级相等的非关联运算符,这些运算符可能不会与其自身关联。因此,例如,语句1<2>1在PHP中是非法的。然而,语句1,因此不能按预期一起使用

更新 它确认,运算符的优先级高于->,因此PHP解释如下:

$this->model::loadData();
作为


检查问题的答案。

我认为您也可以使用->操作符调用静态函数。这样调用时,会显示
致命错误:调用成员函数loadData()在一个非对象上
对不起,我以为你在->模型中有一个对象。你有什么可以工作的?你使用什么版本的PHP?PHP-v:php5.3.15,带有Suhosin补丁(cli)(构建时间:2012年8月24日17:45:44)版权所有(c)1997-2012 PHP组Zend Engine v2.3.0,版权所有(c)1998-2012 Zend Technologies in get()我有:$class=$this->model;return$class::load();我不认为可以做得比这简单得多。PHP就是这样奇怪,它需要一个变量来完成这个技巧。我想你可能可以做($this->model)::load();但这只会导致语法错误。
($this->(model::loadData()));