Задать вопрос

Обработка Fatal error в PHP?

Есть парсер яндекс.маркета, ишет товары по partNo, использую библиотеку simplehtmldom для построения DOM дерева и парсинга информации.
Проблема в том, что если у какого то товара нет описания, соответсвенно нет этого элемента в DOM документе но скрипт при обрашении к элементы, выдает Fatal error: Call to a member function find() on a non-object in

$description = $simple->find('.b-properties',0)->find('tr');

сама строка.

Каким методом можно обработать ошибку и просто заставить функцию вернуть false, а скрипт что бы продолжил работу, так как на очереди другие товары.
  • Вопрос задан
  • 5530 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@boodda
Здесь возможно 2 варианта , первый find возвращает null или false, а второй пытается вызвать у него метод, либо simple равен null или false.
решение 1
if(!$simple){
     //выход или throw new \Exception();
}
if(!($properties = $simple->find('.b-properties',0))){
     //выход или throw new \Exception();
}
if(!($tr = $properties->find('tr'))){
     //выход или throw new \Exception();
}
//Действия если ошибок нет и есть блок с ид=b-properties


Но рассово верно должно быть не проверка на null или false ,а на instanceof ожидаемого объекта
/*
    сначала выполнится instanceof , потом отрицание "!" перед переменной ,
    так как у instanceof выше приоритет чем у отрицания
*/
try{
    if(!$simple instanceof Название_объекта){ 
         //выход или throw new \Exception();
    }
    $properties = $simple->find('.b-properties',0);
    if(!properties instanceof Название_объекта){
         //выход или throw new \Exception();
    }
    $tr = $properties->find('tr');
    if(!$tr instanceof Название_объекта){
         //выход или throw new \Exception();
    }
    //Действия если ошибок нет и есть блок с ид=b-properties
}catch(\Exception $e){
    echo $e->getMessage();
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Просто поставьте if
if($description = $simple->find('.b-properties',0)->find('tr'))
{
Действия если ошибок нет и есть блок с ид=b-properties
.....
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы