[英]PHP call method of class where class name is in field of other class
我有一个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的方法中的新局部变量?
PS:我知道CodeIgniter看起来不像这样,但它的结构与我的问题无关。
正如您所指出的,将$ this-> model分配给像$ model这样的局部变量,然后调用$ model :: loadData()按预期工作。
$ this-> model :: loadData()调用不起作用的事实可能需要我们优先考虑::和- >运算符,但我不能肯定地说,因为在这里没有引用这些官方文件。
对于具有相同优先级的运算符,左结合意味着评估从左到右进行,右结合意味着相反。 对于具有相同优先级的非关联运算符,这些运算符可能不会与它们自身关联。 因此,例如,语句1 <1> 1在PHP中是非法的。 然而,语句1 <= 1 == 1不是,因为T_IS_EQUAL运算符的优先级低于T_IS_SMALLER_OR_EQUAL运算符。
来自PHP运算符优先级 。
我可能会离开这里,但是从你的代码的行为我会说它们是相同的优先级或::具有比- >更高的优先级,因此不能像你想象的那样一起使用。
它确认, ::运算符具有更高的优先级- >因此PHP解释为:
$this->model::loadData();
如
($this->(model::loadData()));
检查$ var :: staticfunction()的答案OK但$ this-> var :: staticfunction()NOT。 理由是什么? 题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.