PHP致命错误 - 未定义的函数

时间:2010-02-21 18:08:25

标签: php

我意识到这有点模糊,但希望有人能指出我正确的方向。

这是错误:致命错误:在第418行调用未定义函数print_row()

原因是这一行:

**$something = profile_display_fields($css->id);**

在此代码中:

$customcss = get_records_select('user_info_field', '', 'sortorder ASC');

foreach ($customcss as $css) {
  if ($css->name == 'usercss') {
   $something = profile_display_fields($css->id);
  }
}

这是第418行:

print_row(s($formfield->field->name.':'), $formfield->display_data());

以下是整个功能:

function profile_display_fields($userid) {
    global $CFG, $USER;

    if ($categories = get_records_select('user_info_category', '', 'sortorder ASC')) {
        foreach ($categories as $category) {
            if ($fields = get_records_select('user_info_field', "categoryid=$category->id", 'sortorder ASC')) {
                foreach ($fields as $field) {
                    require_once($CFG->dirroot.'/user/profile/field/'.$field->datatype.'/field.class.php');
                    $newfield = 'profile_field_'.$field->datatype;
                    $formfield = new $newfield($field->id, $userid);
                    if ($formfield->is_visible() and !$formfield->is_empty()) {
                        print_row(s($formfield->field->name.':'), $formfield->display_data());
                    }
                }
            }
        }
    }
}

3 个答案:

答案 0 :(得分:2)

错误指向正确,我在代码中的某处找不到函数print_row 已定义。确保定义该函数,看起来该函数存在于其他文件中,尝试在其他文件中搜索此函数并在脚本中包含该文件,此错误不会再次显示。

答案 1 :(得分:1)

看起来像moodle的profile /display_fields()在user / profile / lib.php中定义。

print_rows()函数在user / view.php中定义。确保在调用profile_display_fields()之前包含此文件。

编辑:

function print_row($left, $right) {
    echo "\n<tr><td class=\"label c0\">$left</td><td class=\"info c1\">$right</td></tr>\n";
}

这是print_rows()的“原始”定义。如果您正在使用user / profile / lib.php而不是view.php。

,请将其定义

编辑:我不喜欢它,但你可以使函数定义有条件避免“致命错误:无法重新声明函数xyz”

if ( !function_exists('print_row') ) {
  function print_row($left, $right) {
    echo "\n<tr><td class=\"label c0\">$left</td><td class=\"info c1\">$right</td></tr>\n";
  }
}

答案 2 :(得分:0)

您的代码因此错误而失败,因为:

  • print_row()不是PHP Core的功能部分
  • 没有PHP扩展名定义print_row()
  • 您的代码在执行该语句之前未定义名为print_row()的函数。

如果在外部文件中定义print_row(),请确保在调用该函数之前包含此文件。