我有一个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看起来不像这样,但它的结构与我的问题无关。
答案 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运算符。
我可能会离开这里,但是从代码的行为来看,我会说它们要么具有相同的优先级,要么 :: 的优先级高于 - &gt; < / strong>,因此无法按预期使用。
确认, :: 运算符的优先级高于 - &gt; ,因此PHP解释了这一点:
$this->model::loadData();
作为
($this->(model::loadData()));
检查$var::staticfunction() OK but $this->var::staticfunction() NOT. What's the rationale?问题的答案。