2013-02-13 64 views
0

這個問題真的讓我傷腦筋。實例變量未設置在類的一個函數中

我工作的一個定製級出口插件的Moodle,並子類的grade_export類:

class grade_export_sitscsv extends grade_export { 
... 

我已經創建了集兩個自定義變量的形式,讓我實現了一個* process_form( )*功能,然後調用父類的函數:

function process_form($formdata) { 
    $this->grade_item = preg_replace('/itemids\[([0-9]+)\]/','\1',$formdata->grade_item); 
    $this->sits_assnum = $formdata->sits_assnum; 

    parent::process_form($formdata); 
} 

我可以看到,這些實例變量都在我的* display_preview設置()*功能:

public function display_preview() { 
    echo("<h2>Do we need a preview?</h2>"); 
    echo("<p> Grade item: ".$this->grade_item.", SITS num: ".$this->sits_assnum."</p>"); 
} 

(打印件,例如,等級項目:7487,SITS號碼:7)。

然而,當我嘗試使用變量在* print_grades()*功能,它們不設置:

public function print_grades() { 
    global $CFG; 
    echo("Grade item: ".$this->grade_item.", SITS num: ".$this->sits_assnum."\n"); 

...打印Grade項目:坐鎮民:我的輸出文件。

我希望有任何建議可以幫助我解決這個問題。

+0

請將您要調用的代碼發佈到print_grades()。 – 2013-02-13 18:32:50

+0

''print_grades()'在'process_form()'之後被調用嗎? – mkaatman 2013-02-13 18:33:52

+0

謝謝,所有。我在一位同事的幫助下找出了答案...... 我(愚蠢地)期待同一個對象在範圍內一路通過。而是將數據寫入中間頁面的表單中,然後在提交表單後創建對象的新實例。我必須重寫grade_export的get_export_params()方法(添加我的參數),然後將它們添加到我的export.php文件中,並確保它們傳遞給構造函數。 D'Oh! – robhogg 2013-02-13 19:54:04

回答

0

感謝您的回答,Michael和mkaatman--我最終在一位同事的幫助下完成了工作。

的問題是,這print_grades()正在呼籲,是不是同一個對象當display_preview()正在調用的對象,即使是同一類 - 從process_form值()被寫入另一個表格(如< input type =「hidden」... elements),並從這個數據實例化一個新的對象。

我只需要確保我的數據被寫入第二個表單,然後傳遞給新的對象。