繁体   English   中英

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

[英]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运算符优先级

我可能会离开这里,但是从你的代码的行为我会说它们是相同的优先级或::具有比- >更高的优先级,因此不能像你想象的那样一起使用。

UPDATE

它确认, ::运算符具有更高的优先级- >因此PHP解释为:

$this->model::loadData();

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

检查$ var :: staticfunction()的答案OK但$ this-> var :: staticfunction()NOT。 理由是什么? 题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM