簡體   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