0

我正在开发一个脚本来获取 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()

为什么?

谢谢!

4

2 回答 2

2

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

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

文档

于 2013-09-13T14:37:55.550 回答
2

在这一行:

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

您正在加载 HTML,使用loadHTML; 但是您将值分配回$this->dom. loadHTML根据它是否有效返回一个布尔值,因此您正在覆盖现有对象。

您可能应该执行以下操作:

if (! $this->dom->loadHTML($this->response)) {
    // handle error
}
于 2013-09-13T14:38:40.553 回答