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

时间:2013-04-19 09:20:32

标签: php class static-methods

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

我有以下结构

base.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();
}

如果我将$this->model分配给get()中的局部变量,它会起作用,但对我来说看起来很难看。

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

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

1 个答案:

答案 0 :(得分:2)

正如您所指出的,将 $ this-&gt;模型分配给 $ model 等本地变量,然后调用 $ model :: loadData()< / strong>按预期工作。

$ this-&gt; model :: loadData()调用不起作用的事实可能需要我们优先考虑 :: - &gt; 运营商,但由于官方文档中没有对这些内容的引用,我无法肯定地说。

  

对于具有相同优先级的运算符,左结合意味着评估从左到右进行,右结合意味着相反。对于具有相同优先级的非关联运算符,这些运算符可能不会与它们自身关联。因此,例如,声明1&lt; 2&gt; 1,在PHP中是非法的。然而,语句1&lt; = 1 == 1不是,因为T_IS_EQUAL运算符的优先级低于T_IS_SMALLER_OR_EQUAL运算符。

来自PHP Operator Precedence

我可能会离开这里,但是从代码的行为来看,我会说它们要么具有相同的优先级,要么 :: 的优先级高于 - &gt; < / strong>,因此无法按预期使用。

更新

确认, :: 运算符的优先级高于 - &gt; ,因此PHP解释了这一点:

$this->model::loadData();

作为

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

检查$var::staticfunction() OK but $this->var::staticfunction() NOT. What's the rationale?问题的答案。