在非对象上调用成员函数getElementById()

时间:2013-09-13 14:34:25

标签: php dom curl

我正在开发一个脚本,用PHP5的POO中的cURL获取网站的一些元素,这是我的代码:

class obtain{
    protected $url;
    private $handler;
    protected $response;

    function __construct($url){
        $this->url = $url;
    }

    protected function curl(){
        $this->handler  = curl_init($this->url);
        curl_setopt($this->handler, CURLOPT_RETURNTRANSFER, true);
        $this->response = curl_exec($this->handler);
        curl_close($this->handler);
        return $this->response;
    }
}

class page extends obtain{
    private $reponse;
    private $dom;

    function __construct(){
        parent::__construct('http://www.page.com');
        $this->response = parent::curl();
        $this->dom      = new DOMDocument();
        $this->dom      = $this->dom->loadHTML($this->response);
        var_dump($this->dom->getElementById('contenido-portada'));
    }
}

new page();

运行时出现此错误:

致命错误:在...中的非对象上调用成员函数getElementById()

为什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

不要将$this->dom->loadHTML($this->response)的结果分配回$this->dom(因为返回值是布尔值)。

但是,您可能希望使用此布尔值来确保正确地反序列化HTML。

Documentation

答案 1 :(得分:2)

在这一行:

$this->dom      = $this->dom->loadHTML($this->response);

您正在使用loadHTML加载HTML;但是您要将值分配回$this->domloadHTML返回一个布尔值,具体取决于它是否有效,因此您覆盖了现有对象。

你应该做的事情如下:

if (! $this->dom->loadHTML($this->response)) {
    // handle error
}