2015-08-11 3 views
1

Мне нужно создать функцию, которая возвращает html на основе URL-адреса.Вызов функции-члена для не-объекта

function start() 
{ 
     $url = "http://dostuff.com"; 

     $site = new \DOMDocument(); 
     $site->loadHTML(file_get_contents($url)); 

     //do stuff with it 
     $listview = $site->getElementById('colLeft'); 
     var_dump($this->getValuesOfAttribute($listview,'a','href')); 
} 

Это на самом деле работает, но мне нужно использовать эту функцию в ряде других functions.So я мог бы принести Aswell содержания в своем собственном методе.

public function start() 
    { 
     $site = $this->getHTMLByURL("http://dostuff.com"); 

     //do stuff with it 
     $listview = $site->getElementById('colLeft'); 
     var_dump($this->getValuesOfAttribute($listview,'a','href')); 
    } 

    public function getHTMLByURL($url) 
    { 
     $site = new \DOMDocument(); 
     return $site->loadHTML(file_get_contents($url)); 
    } 

Fatal error: Call to a member function getElementById() on a non-object in [file_path] Call to a member function getElementById() on a non-object

Почему '$ сайт' не-объект? не имеет ли то же значение, что и у первой функции?

ответ

3

Ваша функция getHTMLByUrl не возвращает то, что вы думаете.

public function getHTMLByURL($url) 
{ 
    $site = new \DOMDocument(); 
    return $site->loadHTML(file_get_contents($url)); 
} 

его возвращение булево результат loadHTML вызова, а не объект.

см. here для документации.

то, что вам нужно сделать, это:

public function getHTMLByURL($url) 
{ 
    $site = new \DOMDocument(); 
    $site->loadHTML(file_get_contents($url)); 
    return $site;  
} 
+0

Так это было возвращение булево из LoadHTML и вместо DOMDocument. Спасибо. – user3531149