簡體   English   中英

PHP中的類靜態函數變量參考

[英]Class static function variable reference in PHP

PHP 7。

我試圖在不同情況下使用相同的類方法。 第一次,當用戶在數據庫中創建新條目時,我用空值繪制了管理頁面。 它的創建如下。

$classname::drawAdmin(FALSE);

$ classname是一個變量,因為我事先不知道網頁上將使用哪些類(Ikr?),並且必須從數據庫中獲取它。

在方法內部,它檢查是否正在創建一個新對象,或重用現有對象。

static function drawAdmin( $mod = FALSE ) {
        print 'Technology<input type="text" name="technology" value="'.($mod?$this->technology:"").'" /><br />';
etc...
}

創建新條目時,它工作良好,請檢查它是否正在嘗試修改,如果沒有,則創建一個沒有值的輸入,否則它將對象數據寫入值中。

但是,當我創建一個新對象並嘗試修改它的數據時,它不起作用。

$class = new $row['class_name']($_GET['id']);
$class->drawAdmin(TRUE);

(類的構造函數清除$ _GET數組。)

在這種情況下,我會收到一條錯誤消息:

Fatal error: Using $this when not in object context in [censored]/class.phone.php on line 932

即使對象已正確創建並存在(使用var_dump檢查)。

哈哈,對我開玩笑,這是一個靜態方法,所以我不能使用$ this! 但是,當我將打印內容更改為:

static function drawAdmin( $mod = FALSE ) {
        print 'Technology<input type="text" name="technology" value="'.($mod?self::technology:"").'" /><br />';
etc...
}

我仍然收到錯誤消息:

Fatal error: Undefined class constant 'technology' in [censored]/class.phone.php on line 932

如果我將(受保護的)變量添加到靜態變量,則無法再通過$ this->使用它們。

有什么辦法可以在對象和對象上下文之間使用相同的類變量?

我認為您可以使該方法保持靜態,但如果要編輯現有對象,則必須將同一類的實際實例作為可選的第二個參數傳遞給該方法,以在$ mod為true時使用,並且然后使用該實例中的“技術”值。

例如:

static fuction drawAdmin($mod=FALSE, $class=NULL) { 
        print 'Technology<input type="text" name="technology" value="'.($mod?$class->getTechnology():"").'" /><br />';
}

然后,如果是修改的話,可以這樣稱呼它:

$class->drawAdmin(TRUE, $class);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM