“未定义的属性:stdClass”

时间:2011-12-13 22:04:37

标签: drupal drush pressflow

将Pressflow添加到Drupal安装时突然发生此错误。它来自一个自定义模块,在Pressflow之前似乎工作正常。添加Pressflow后,运行Drush会导致此错误显示在屏幕上。

标识为错误来源的函数如下所示:

function user_search_location_get(&$user) {
  if (count($user->user_location_pref)) {  // This line is causing the error.
    return $user->user_location_pref;
  }

  // …
}

错误消息如下:

  

WD php:注意:未定义的属性:user_search_location_get()中的stdClass :: $ user_location_pref

1 个答案:

答案 0 :(得分:2)

简短回答,在您的自定义模块中,您应该在计算之前检查该属性是否存在。那,或者在使用之前确保$ user对象具有该属性。

if (isset($user->user_location_pref) && count($user->user_locaion_pref) > 0) {
  return $user->user_locaion_pref;
}

虽然这是一项更多的工作,但是当你开始使用通知进行开发时,你会发现代码中的错误,否则在以后就不会出现错误,并且会更难以追踪。

在以前的环境或安装中,PHP错误报告可能设置为不显示通知。虽然我建议保持通知并使代码与它们一起使用,但您可以通过Drupal 7 UI关闭它们。配置 - >发展 - >记录和错误。然后将值设置为“错误和警告”...否则,您可以在php.ini中设置错误报告级别,以报告除通知之外的所有内容。

请注意,Drupal 6没有强制通知报告,而Drupal 7则会。这引发了很多这类问题。

如果这是您唯一的通知问题,那么只更正您的自定义模块会更有意义。