PHP致命错误:在非对象上调用成员函数find(),但我的函数工作

时间:2013-12-09 15:02:13

标签: php simple-html-dom

我在我的代码的第71行收到此错误,但是这行的功能正确执行,它完成了我期望它做的事情。

但是,我注意到我的错误日志中充满了这些行:

  

[09-Dec-2013 14:54:02 UTC] PHP致命错误:在第71行的/home/sportve/public_html/open_event_common.php中调用非对象上的成员函数find()

我检查过的内容:

simple_html_dom_parser已经包含在内,而第71行打算执行此功能正在运行。

以下是我的代码的第71行:

$content->find('a.openevent', 0)->innertext = '';

因此导致此错误出现在我的错误日志文件中的原因令人困惑吗?

编辑:这是完整的代码:

<?php       
    $url = "static/" . $cat_map[$cat]['url'];
    $html = file_get_html($url);
    $content = $html->find('div#event-pane > div#e' . $event_id, 0);
    $content->find('a.openevent', 0)->innertext = '';
    $content->find('h3.lshtitle', 0)->onclick = '';
    $content->find('h3.lshtitle', 0)->tag = 'div';
    $content->find('div.lshtitle', 0)->class = 'ttl';                
?>

1 个答案:

答案 0 :(得分:15)

根据您提供的最佳和最实用的解决方案,只需检查$html$content是否为空。

当你得到一个“调用一个成员函数[无论函数是什么]对非对象”时,10次中有9次,这基本上意味着该对象不存在。意味着变量是空的。这是你的代码重做:

$url = "static/" . $cat_map[$cat]['url'];
if (!empty($url)) {
  $html = file_get_html($url);
  if (!empty($html)) {
    $content = $html->find('div#event-pane > div#e' . $event_id, 0);
    if (!empty($content)) {
      $content->find('a.openevent', 0)->innertext = '';
      $content->find('h3.lshtitle', 0)->onclick = '';
      $content->find('h3.lshtitle', 0)->tag = 'div';
      $content->find('div.lshtitle', 0)->class = 'ttl';
    }
  }
}

另外,我添加了一项检查,看看$url是否也是空的。