实例变量未在类的一个函数中设置

时间:2013-02-13 18:27:58

标签: php moodle

这个问题真的让我头疼。

我正在为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");

...将成绩项目:SITS num:打印到我的输出文件中。

我希望有任何建议可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

感谢你的回答,Michael和mkaatman - 我在同事的帮助下最终解决了这个问题。

问题是,正在调用 print_grades()的对象与调用 display_preview()时的对象不同,即使它是同一个类 - 来自 process_form()的值被写入中间页面中的另一种形式(作为&lt; input type =“hidden”... 元素),并且从该数据中实例化了一个新对象。

我只需确保将我的数据写入第二种形式,然后传递给新对象。