Попытка поймать $ xpath-> оценивать в php - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь поймать свойство Попытка получить уведомление об отсутствии объекта, которое возникает, когда мой
$xpath->evaluate не находит соответствующий объект.

это мой код

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$sources = $xpath->evaluate("//img/@src"); # "/images/image.jpg"
$src = $sources[0]->value;
echo $src;

Я уже пытался поместить $sources = $xpath->evaluate("//img/@src"); в оператор try и catch, но, поскольку он не является ошибкой исключения, он не работает.

Также я пытался использовать

if ($sources) {
  $src = $sources[0]->value;
  echo $src;
}

это тоже не сработало.

Знаете ли вы, что я могу сделать, чтобы поймать уведомление?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Вы должны использовать свойство length вашего результата, которое содержит счетчик.

if ($sources->length > 0) {
    $src = $sources[0]->value;
    echo $src;
}

В дополнение к этому: вы можете ловить только исключения.Предупреждения и ошибки не являются исключениями.Если вы хотите их перехватить, вы должны зарегистрировать свой собственный обработчик ошибок, который затем генерирует исключение.В вашем случае это также было бы возможно, но это всегда лучшее решение, чтобы полностью избежать такого рода ошибок.

0 голосов
/ 17 мая 2018

Вы можете проверить, что что-то возвращено, а количество вернувшихся узлов ...

if ($sources !== false && $sources->length > 0) {
  $src = $sources[0]->value;
  echo $src;
}

evaluate() может возвращать DOMNodeList, поэтому приведенный выше код проверяет length.

...