2013-02-13 66 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),并从这个数据实例化一个新的对象。

我只需要确保我的数据被写入第二个表单,然后传递给新的对象。