PHP: ошибка при проверке ошибок - PullRequest
0 голосов
/ 13 декабря 2011
if($xml->getElementsByTagName($elmnt) && $xml->getElementsByTagName($elmnt)->length > 0)

Эта строка предназначена для проверки ошибок. Все, что я хочу, это вместо того, чтобы ломать всю страницу , сделать четкое сообщение об ошибке. Он включен в функцию, предназначенную для остановки всех связанных процессов при сбое и продолжения отображения остальной части страницы, если она не работает, поскольку макет страницы не зависит от того, успешно ли выполняется эта функция.

Неустранимая ошибка: вызов функции-члена getElementsByTagName () для необъекта в file.php в строке 100

Как я на самом деле проверяю, чтобы убедиться, что у рассматриваемого DOMDocument есть элемент, и он не выдает ошибку выше? Я пытался использовать только первое условие или второе условие.

var_dump($xml);

object(DOMDocument)#3 (1) {
  ["preserveWhitespace"]=>
  bool(false)
}

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

Ваша проблема в том, что $xml не является объектом, вы должны сначала проверить это:

if ($xml && ($obj = $xml->getElementsByTagName($elmnt)) && $obj->length > 0) {
    // you should be good as this point
}

Вы также можете использовать !empty($xml) вместо $xml, если есть вероятность, что $xml не определено.

0 голосов
/ 13 декабря 2011

Если вы используете simplexml_load_file для загрузки файла, он либо вернется с успешной загрузкой, либо вернет false при сбое. Получаемая ошибка означает, что переменная $ xml не является объектом, что означает, что когда вы пытались загрузить файл xml в переменную, она не прошла успешно.

Если перед выполнением getElementsByTagName ($ elmnt) вы убедитесь, что $ xml не является ложным, вы не должны получить ошибку Неустранимая ошибка: вызов функции-члена getElementsByTagName () для необъекта в файле .php на линии 100

if (file_exists('test.xml')) {
    $xml = simplexml_load_file('test.xml');
    if($xml){
        print_r($xml);
    }
} else {
    exit('Failed to open test.xml.');
}
...