我正在开发一个脚本,用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()
为什么?
谢谢!
答案 0 :(得分:2)
不要将$this->dom->loadHTML($this->response)
的结果分配回$this->dom
(因为返回值是布尔值)。
但是,您可能希望使用此布尔值来确保正确地反序列化HTML。
答案 1 :(得分:2)
在这一行:
$this->dom = $this->dom->loadHTML($this->response);
您正在使用loadHTML
加载HTML;但是您要将值分配回$this->dom
。 loadHTML
返回一个布尔值,具体取决于它是否有效,因此您覆盖了现有对象。
你应该做的事情如下:
if (! $this->dom->loadHTML($this->response)) {
// handle error
}